Sun Java ロゴ     前へ      目次      索引      次へ     

Sun ロゴ
Sun Java™ System Identity Manager 7.1 リソースリファレンス 

第 3 章
リソースへのアクションの追加

この章では、Sun JavaTM System Identity Manager で、UNIX、メインフレーム、Windows NT、Oracle ERP、および Windows Active Directory リソースのアクションを作成および実装する方法を説明します。


アクションとは

アクションとは、スクリプトアクションのネイティブサポートが存在する場合に、管理するリソースのコンテキスト内で実行するスクリプトです。たとえば、UNIX オペレーティングシステムによるシステムでは、アクションは一連の UNIX シェルコマンドです。Microsoft Windows 環境では、アクションは CMD コンソール内で実行可能な DOS 形式のコンソールコマンドになります。アクションは Identity Manager リポジトリ内にオブジェクトとして存在します。メインフレーム環境では、アクションは、メインフレームとの間でキーストロークやコマンドを送受信できる Javascript スクリプトです。Oracle ERP では、アクションは、JDBC 接続を使用して Oracle データベースの追加カスタムフィールドを管理する Javascript または Beanshell スクリプトです。

アクションは、リソースアカウントオブジェクトに対して直接実行される作業ではなく、そのリソースアカウントの作成、更新、または削除の前またはあとに実行される作業を行う場合に使用します。リソースアクションでは、ユーザーを作成したあとの、新規ユーザーのディレクトリへのファイルのコピーや、そのユーザーに関する UNIX の SUDOers ファイルの更新などのネイティブアクティビティーがサポートされます。このタイプの作業は、カスタムリソースアダプタを使用することにより実行できます。ただし、カスタムリソースアダプタを配備するよりも、アクションを追加したリソースアダプタを配備するほうが簡単です。

アクションには次の 3 種類の結果メッセージが関連付けられます。


サポートされるプロセス

次のプロセスで、前アクションと後アクションがサポートされます。


サポートされるリソース

次のリソースにアクションを追加できます。

サポートされるバージョンのリストについては、本書の各アダプタの節を参照してください。


アクションの定義

新しいリソースアクションを作成するには、次の手順に従います。

  1. アクションファイルを作成します。
  2. アクションファイルを Identity Manager に読み込みます。

アクションファイルの作成

アクションを作成するには、次のテキストを含むファイルを作成します。

<ResourceAction name="Name">
   <ResTypeAction restype="ResourceType" actionType="Language" timeout="Milliseconds">
      <act>
      ...
      </act>
   </ResTypeAction>
</ResourceAction>

各表記の意味は次のとおりです。

たとえば、次の XML は Solaris リソースのアクションを定義しています。

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Waveset>
   <ResourceAction name='after-create'>
      <ResTypeAction restype='Solaris' timeout='60000'>
         <act>
         #!/bin/ksh
         echo "$WSUSER_accountId says Hello World!"
         # exit $DISPLAY_INFO_CODE if there is not a failure, but you want
         # the output to be propagated to the UI
         #exit 0
         exit $DISPLAY_INFO_CODE
         </act>
      </ResTypeAction>
   </ResourceAction>
</Waveset>


<act> 要素内に含まれるコードは、UNIX スクリプト (ksh または sh) や Windows バッチスクリプトの場合と同じです。


環境変数はエクスポートされ、アクションで利用できるようになります。これらの環境変数は、ユーザーに関する値 (リソーススキーママップの「アイデンティティーシステム リソース属性」列で定義される) を持つ、スキーマにマップされたすべての属性を、先頭に WSUSER_ を付加して構成します。たとえば、前述の例では、Solaris リソーススキーママップで定義された AccountId 属性の先頭に WSUSER_ を付加して構成された環境変数 WSUSER_AccountIdが使用されています。これらの変数は、それぞれのシェル内で環境変数として認識されるようにするため、Solaris では、変数名の前に $ (ドル記号) が付加されます。

アクションファイルを作成するときは、次に示す事項に留意してください。

Identity Manager へのアクションファイルの読み込み

アクションを Identity Manager にインポートするには、次の手順に従います。

  1. Identity Manager 管理者インタフェースにログインします。
  2. メニューバーで、「設定」、「交換ファイルのインポート」の順に選択します。
  3. アクションが含まれている XML ファイルを入力するか、または参照して選択し、「インポート」をクリックします。


アクションの実装

アクションの定義が完了したら、次の手順に従ってそのアクションを実装します。

  1. Identity Manager ユーザーフォームのフィールドを定義します。
  2. アクションを呼び出すリソースのスキーママップにエントリを追加します。

手順 1: Identity Manager ユーザーフォームフィールドを定義する

ユーザー操作の前またはあとに実行するアクションを割り当てるユーザーフォームフィールドを作成します。

次の例では、ユーザー作成操作のあとに実行する after-create というアクションを定義しています。

<Field name='global.create after action'>
   <Expansion>
      <s>after-create</s>
   </Expansion>
</Field>

フィールド名の形式は次のとおりです。

{create|update|delete} {before|after} action

Identity Manager のフォームの操作の詳細については、『Identity Manager ワークフロー、フォーム、およびビュー』を参照してください。

手順 2: スキーママップエントリを追加する

アクションを実行するリソースのスキーママップにエントリを追加します。次の手順で実行します。

  1. Identity Manager メニューバーで「リソース」をクリックし、リソースを選択します。
  2. 「リソースの編集」ページで、「スキーマの編集」をクリックします。
  3. スキーママップで、「属性の追加」をクリックして、スキーママップに行を追加します。
  4. 「アイデンティティーシステム ユーザー属性」列に、「create after action」と入力します。
  5. 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。IGNORE_ATTR エントリによって、その属性は通常のアカウント属性処理では無視されます。
  6. 「保存」をクリックします。


Windows NT の例

ここでは、リソースアダプタで次の操作が実行されたあとに Windows NT リソースで実行できるアクションの例を示します。

例 1: ユーザーの作成後のアクション

この手順では、Windows NT リソースで新規ユーザーの作成後に実行するアクションを含める方法を示します。

  1. Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「create after action」と入力します。
  2. 「属性タイプ」列で、「string」を選択します。
  3. 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
  4. ユーザーの作成または編集に使用するユーザーフォームに次のコードを追加します。
  5. <Field name='resourceAccounts.currentResourceAccounts[NT].attributes.
    create after action'>
       <Expansion>
          <s>AfterDelete</s>
       </Expansion>
    </Field>

  6. 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
  7. <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
    <Waveset>
       <ResourceAction name='AfterCreate'>
          <ResTypeAction restype='Windows NT' timeout='6000'>
             <act>
             echo create >> C:¥Temp¥%WSUSER_accountId%.txt
             exit
             </act>
          </ResTypeAction>
       </ResourceAction>
    </Waveset>

例 2: ユーザーアカウントの更新または編集後のアクション

この手順では、Windows NT リソースでユーザーの更新または編集後に実行するアクションを含める方法を示します。

  1. Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「update after action」と入力します。
  2. 「属性タイプ」列で、「string」を選択します。
  3. 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
  4. ユーザーの作成および編集に使用するユーザーフォームに次のフィールドを追加します。
  5. <Field name='resourceAccounts.currentResourceAccounts[NT].
    attributes.update after action'>
       <Expansion>
          <s>AfterUpdate</s>
       </Expansion>
    </Field>

  6. 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
  7. <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
    <Waveset>
       <ResourceAction name='AfterUpdate'>
          <ResTypeAction restype='Windows NT' timeout='6000'>
             <act>
             echo update >> C:¥Temp¥%WSUSER_accountId%.txt
             exit
             </act>
          </ResTypeAction>
       </ResourceAction>
    </Waveset>

例 3: ユーザーの削除後のアクション

この手順では、Windows NT リソースでユーザーの削除後に実行するアクションを含める方法を示します。

  1. Windows NT スキーママップの「Identity Manager ユーザー属性」列に、「delete after action」と入力します。
  2. 「属性タイプ」列で、「string」を選択します。
  3. 「リソース ユーザー属性」列に、「IGNORE_ATTR」と入力します。「必須」、「監査」、「読み取り専用」、および「書き込み専用」の各列は、チェックマークを外したままにします。
  4. 「Deprovision Form」ユーザーフォームの </Include> タグのあとに次のフィールドを追加します。
  5. <Field name='resourceAccounts.currentResourceAccounts[NT].attributes.
    delete after action'>
       <Expansion>
          <s>AfterDelete</s>
       </Expansion>
    </Field>

  6. 次の XML ファイルを作成し、Identity Manager にインポートします。ファイルのパスは、環境に合わせて変更してください。
  7. <?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE Waveset PUBLIC 'waveset.dtd' 'waveset.dtd'>
    <Waveset>
       <ResourceAction name='AfterDelete'>
          <ResTypeAction restype='Windows NT' timeout='6000'>
             <act>
             echo delete >> C:¥Temp¥%WSUSER_accountId%.txt
             exit
             </act>
          </ResTypeAction>
       </ResourceAction>
    </Waveset>

  8. NT リソースの XML を編集し、「delete after action」スキーママッピングに情報を追加します。新しく追加する部分を含む、このリソースの完全なスキーママッピングの例を次に示します。ここでは、ビュー関連の情報を追加します。
  9. <AccountAttributeType id='12' name='delete after action' syntax='string' mapName='IGNORE_ATTR' mapType='string'>
       <Views>
          <String>Delete</String>
       </Views>
    </AccountAttributeType>


Domino の例

Domino リソースでは、前アクションと後アクションがサポートされます。

現在は、LotusScript と cmd シェルの 2 種類のアクションがサポートされています。どの操作アクションにも、実行される任意の数のアクションを実装できます。

次の例は、LotusScript および cmd シェルのリソースアクションの使用方法を示しています。

LotusScript の例

<ResourceAction name='iterateAttributes' createDate='1083868010032'>
   <ResTypeAction restype='Domino Gateway' actionType='lotusscript'>
      <act>
         Sub Initialize
            Main
         End Sub
         Sub Main
            Dim session As New NotesSession
            Dim doc As NotesDocument
            Set doc = session.DocumentContext
            Forall i In doc.Items
               Dim attrVal As Variant
               attrVal = doc.GetItemValue(i.Name)
            End Forall
         End Sub
      </act>
   </ResTypeAction>
</ResourceAction>

cmd シェルの例

<ResourceAction name='getDirectoryContents' createDate='1083868010032'>
   <ResTypeAction restype='Domino Gateway'>
      <act>dir</act>
   </ResTypeAction>
</ResourceAction>


actionType が null の場合は、cmd スクリプトタイプがデフォルトとして使用されます。


LotusScript の実行

Domino では、LotusScript の実行はデータベースに接続されたエージェントによって処理されます。Domino アダプタは、次のいずれかの方法で LotusScript を実行します。

入力

結果

agentName

エージェントを実行します。

agentName およびスクリプト

スクリプトを用いてエージェントを更新し、そのエージェントを実行します。

agentName、agentCreate、およびスクリプト

スクリプトを用いてエージェントを作成し、そのエージェントを実行します。

次に示すカスタマイズされたアカウント属性は、LotusScript で使用できます。これらの属性のいずれかを使用する場合は、その属性を Domino ゲートウェイスキーママップに追加します。「リソース ユーザー属性」列には値として「IGNORE_ATTR」を指定します。

LotusScript への引数

エージェントの引数は、バックエンド NotesSession クラスからの専用プロパティーを介して、LotusScript へのノートハンドルで指定されます。これは次のように定義できます。

NotesDocument = NotesSession.DocumentContext

アクションスクリプトルーチンによって NotesDocument をインスタンス化し、そのフィールド値を LotusScript サブルーチンへのパラメータとして読み取ることができます。

ドキュメントに定義された任意の引数の名前と値を取得する LotusScript の例を次に示します。

Dim session As New NotesSession
Dim doc As NotesDocument
Set doc = session.DocumentContext

Forall i In doc.Items
   Dim attrVal As Variant
   attrVal = doc.GetItemValue(i.Name)
   Print(" Attribute Name: " + i.Name + " Value: " + attrVal(0))
End Forall

NT アクションの場合と同じように、アクションの呼び出し中に定義された属性はすべて、先頭に WSUSER_ が付加された NotesDocument に配置されます。

cmd シェルの実行

アクションは、拡張機能を有効にした Windows コマンドインタプリタ cmd.exe を使用して実行されます。ユーザー操作の前に実行するアクションでは、ゼロの値を返す必要があります。そうしないと、操作はエラー終了となります。

cmd シェルへの引数

NT/ADSI cmd アクションと同様に、環境変数はエクスポートされ、アクションで利用できるようになります。これらの環境変数は、ユーザーに関する値 (リソーススキーママップの「Identity Manager ユーザー属性」列で定義される) を持つ、スキーマにマップされたすべての属性を、先頭に WSUSER_ を付加して構成します。

複数値属性は、次のようなパイプ区切りリストで構成されます。

WSUSER_groups=staff|admin|users


メインフレームの例

ACF2、RACF、Natural、および Top Secret アダプタには、login および logoff リソースアクションが必要になります。login アクションは、認証されたセッションに関してメインフレームとネゴシエーションを行います。logoff アクションは、そのセッションが不要になったときに接続を解除します。

thin クライアントのホストアクセス 3270 エミュレータは、スクリプトセッション内のコマンドの実行を簡素化するために、リソースアダプタによるリソースアクションのコンテキストに提供されます。このエミュレータは、com.waveset.object.HostAccess クラスで定義されます。リソースアクションに渡される hostAccess オブジェクトで使用可能なメソッドに関する詳細については、HostAccess に関する JavaDoc を参照してください。

リソースアクションのコンテキスト

スクリプトアクションのコンテキスト内で、いくつかのグローバル変数が必要とされることがあります。

オブジェクト

説明

hostAccess

TN3270 エミュレータ。コマンドを実行してメインフレームからの応答を解析するためのインタフェースを提供します。簡易メソッドを提供するために com.waveset.object.HostAccess によってラップされます

hostAccessLogin

com.waveset.adapter.HostAccessLogin インタフェースを実装するクラスのインスタンス。主に、ログインプロセス中にイベントが失敗した場合に必要とされることがある logoff() メソッドを実装するために使用されます。

user

ログオンする管理ユーザー名を含みます。

password

メインフレームユーザーのパスワードを格納する暗号化されたオブジェクト。プレーンテキストに変換するには password.decryptToString() を使用します。

system

メインフレームシステム名

SendKeys メソッドのニーモニックキーワード

次の表では、英数字以外の値のキー入力をシミュレートする 3270 エミュレータを通して実行される可能性がある特殊機能について説明します。

機能

ニーモニックキーワード

機能

ニーモニックキーワード

Attention

[attn]

F1

[pf1]

Backspace

[backspace]

F2

[pf2]

Backtab

[backtab]

F3

[pf3]

Beginning of Field

[bof]

F4

[pf4]

Clear

[clear]

F5

[pf5]

Cursor Down

[down]

F6

[pf6]

Cursor Left

[left]

F7

[pf7]

Cursor Right

[right]

F8

[pf8]

Cursor Select

[cursel]

F9

[pf9]

Cursor Up

[up]

F10

[pf10]

Delete Character

[delete]

F11

[pf11]

DUP Field

[dup]

F12

[pf12]

Enter

[enter]

F13

[pf13]

End of Field

[eof]

F14

[pf14]

Erase EOF

[eraseeof]

F15

[pf15]

Erase Field

[erasefld]

F16

[pf16]

Erase Input

[erinp]

F17

[pf17]

Field Mark

[fieldmark]

F18

[pf18]

Home

[home]

F19

[pf19]

Insert

[insert]

F20

[pf20]

New Line

[newline]

F21

[pf21]

PA1

[pa1]

F22

[pf22]

PA2

[pa2]

F23

[pf23]

PA3

[pa3]

F24

[pf24]

Page Up

[pageup]

 

Page Down

[pagedn]

Reset

[reset]

System Request

[sysreq]

Tab Field

[tab]

サンプルリソースアクション

次のコードは、login リソースアクションと logoff リソースアクションのサンプル一式です。このサンプルは、Top Secret リソースを使用する、ある特定の顧客の環境に合わせた内容になっています。したがって、コマンド、プロンプト、コマンドシーケンスなどのテキストは、配備環境によって異なる可能性があります。これらのリソースアクションは、XML 内の Javascript をラップします。

Login アクション

<ResourceAction name='ACME Logoff Action'>
   <50ResTypeAction restype='TopSecret'>
      <act>
         var TSO_MORE = " ***";
         var TSO_PROMPT = " READY";
         var TS_PROMPT = " ?";
         hostAccess.waitForString("ENTER YOUR APPLICATION NAME");
         hostAccess.sendKeys("tso[enter]");
         hostAccess.waitForString("ENTER USERID ");
         hostAccess.sendKeys(user + "[enter]");
         hostAccess.waitForString("TSO/E LOGON");
         hostAccess.sendKeys(password.decryptToString() + "[enter]");
         hostAccess.sendKeys(password.decryptToString());
         var pos = hostAccess.searchText("  -Nomail", false);
         if (pos != 0) {
            hostAccess.setCursorPos(pos);
            hostAccess.sendKeys("S");
         }
         pos = hostAccess.searchText("  -Nonotice", false);
         if (pos != 0) {
            hostAccess.setCursorPos(pos);
            hostAccess.sendKeys("S");
         }
         hostAccess.sendKeys("[enter]");
         hostAccess.waitForStringAndInput(TSO_MORE);
         hostAccess.sendKeys("[enter]");
         hostAccess.waitForStringAndInput(TSO_MORE);
         hostAccess.sendKeys("[enter]");
         hostAccess.waitForStringAndInput("ISPF");
         hostAccess.sendKeys("=x[enter]");
         hostAccess.waitForString(TSO_PROMPT);
         var resp =hostAccess.doCmd("PROFILE NOPROMPT MSGID NOINTERCOM NOPAUSE NOWTPMSG PLANGUAGE(ENU) SLANGUAGE(ENU) NOPREFIX[enter]", TSO_PROMPT, TSO_MORE);
         hostAccess.waitForStringAndInput("ENTER LOGON:");
         hostAccess.sendKeys(system + "[enter]");
         hostAccess.waitForStringAndInput("USER-ID.....");
         hostAccess.sendKeys(user + "[tab]" + password.decryptToString() + "[enter]");
         var stringsToHide = new java.util.ArrayList();
         stringsToHide.add(password.decryptToString());
         hostAccess.waitForString("==>", stringsToHide);
         hostAccess.waitForInput();
         hostAccess.sendKeys("[pf6]");
         hostAccess.waitForInput();
      </act>
   </ResTypeAction>
</ResourceAction>

Logoff アクション

<ResourceAction name='ACME Logoff Action'>
   <50ResTypeAction restype='TopSecret'>
      <act>
         var TSO_PROMPT = " READY";
         hostAccess.sendKeys("[clear]end[enter]");
         hostAccess.waitForString(TSO_PROMPT);
         hostAccess.sendKeys("logoff[enter]");
      </act>
   </ResTypeAction>
</ResourceAction>


ビューの拡張

ビューに属性を追加できます。属性はすべて登録されている必要があります。

Identity Manager でのさまざまなプロビジョニングアクティビティーにおいて利用できるユーザー属性は、そのアクションを完了するために必要な属性に限定されます。たとえば、ユーザーを編集する場合には、割り当てられたリソースの中で更新可能と定義されているユーザー属性のみが利用できます。一方、パスワードの変更プロセスでは、要求を実行するための属性のサブセットのみを必要とします。

属性の登録

属性は、次の 2 つの場所のどちらかに登録できます。

Location

属性をここに登録する条件

リソース内の AccountAttributeType 定義

... 更新する属性が、そのタイプのすべてのリソースではなく、特定のリソースに固有の属性である場合。

System Configuration オブジェクト

特定タイプのすべてのリソースに対してグローバルに登録する場合。これらの登録は XML 形式で行ってください。

ビューごとに異なる属性を登録できます。たとえば、lock 属性をパスワードビューに登録したり、firstname 属性を名前の変更ビューに登録したり、リソースアクションを有効化ビュー、無効化ビュー、またはプロビジョニング解除ビューに登録したりできます。


前アクションと後アクションの場合は、作成または更新のユーザープロセスを除くすべてのプロセスのビューを拡張してください。ビューの拡張については、「Identity Manager Views」を参照してください。


グローバル登録

グローバル登録を行うには、次のパスを持つ System Configuration オブジェクトに属性を追加します。

updatableAttributes.ViewName.ResourceTypeName

ここで、ViewName は Password、Reset、Enable、Disable、Rename、または Delete のいずれかで、ResourceTypeName はリソースタイプの名前です。all というタイプ名は、すべてのリソースに適用される登録用に予約されています。

この属性の値には、<String> のリストを指定します。各文字列は、更新する属性の名前です。次の例では、delete before action という名前の属性を、すべてのリソース用のプロビジョニング解除ビューに登録します。

<Attribute name='updatableAttributes'>
   <Object>
      <Attribute name='Delete'>
         <Object>
            <Attribute name='all'>
               <List>
                  <String>delete before action</String>
               </List>
            </Attribute>
         </Object>
      </Attribute>
      <Attribute name='Enable'>
         <Object>
            <Attribute name='all'>
               <List>
                  <String>enable before action</String>
               </List>

            </Attribute>
         </Object>
      </Attribute>
   </Object>
</Attribute>

リソース別登録

リソース別登録を行うには、そのリソースオブジェクトを Identity Manager デバッグページで変更し、AccountAttributeType 要素内に <Views> サブ要素を挿入します。<Views> には、この属性を更新できるビューの名前を示す文字列値のリストを含めます。

<AccountAttributeType name='lastname' mapName='sn' mapType='string'>
   <Views>
      <String>Rename</String>
   </Views>
</AccountAttributeType>

このビューでは、変更する文字列が次のオブジェクト内に配置されます。

resourceAccounts.currentResourceAccounts[ResourceTypeName].attributes

例:

<Field name= 'resourceAccounts.currentResourceAccounts[OS400ResourceName].attrib utes.delete before action' hidden='true'>
   <Expansion>
      <s>os400BeforeDeleteAction</s>
   </Expansion>
</Field>



前へ      目次      索引      次へ     


Part No: 820-2531.   Copyright 2007 Sun Microsystems, Inc. All rights reserved.