N1 Grid Service Provisioning System 5.0 プランとコンポーネントの開発者ガイド

置換に使用できる変数の種類

コンポーネント、プラン、変数設定、および構成可能なリソース内で、次の種類の変数を参照できます。

単純置換変数参照

入力ソースには、任意の数の単純置換変数参照を含めることができます。単純置換変数の構文は、次のとおりです。


:[variable]

variable は次のいずれかです。

事前定義されたコンポーネント変数名

事前定義されたコンポーネント変数名は、次のように、生成コンテキストの関連するコンポーネント属性を参照します。

事前定義されたコンポーネント変数は、変数参照がベースコンポーネントで行われる場合でも、常に、インストールされている実際の コンポーネントに関連付けられて解決されます。事前定義されたコンポーネント変数は、PUBLIC 変数として扱われます。

置換変数のエスケープシーケンス

入力ソースに :[ を含める場合は、 :[[ を使用してエスケープする必要があります。:[[ を検出するたびに、構成生成機能が :[ に置き換えます。

たとえば、プロビジョニングシステムに box の値を置換させるのではなく、:[box] を字句どおりに含める場合は、:[[box] を使用します。

入力ソースが XML で作成されたコンポーネントの属性である場合、値は XML ベースのエスケープシーケンスに関する次の規則が適用されます。

これらのエスケープ規則は、プロビジョニングシステムのブラウザインタフェース、構成リソースファイル、または構成生成 CLI コマンドの入力によるオーバーライド値には当てはまりません。

置換変数の展開

置換変数参照が変数設定値によって置き換えられるときには、値がそのつど展開されてから置換されます。この展開が必要なのは、値そのものに単純置換変数の参照が含まれている場合があるからです。値の置換を禁止するには、入力ソースを :[[ でエスケープします。

デフォルト置換値またはオーバーライド置換値、パラメータのデフォルト値、およびローカル変数のデフォルト値で使用できるのは、ホストおよび外部コンポーネント置換参照だけです。このような参照は、その他の入力ソースでは認められません。

単純置換変数参照の展開

変数設定値における単純置換変数参照の構文は、入力ソースの場合と同じです。


:[varname]

この場合、参照する変数名が、参照が含まれる変数より先に宣言されていなければなりません。この制約によって、参照の循環が防止されます。

派生コンポーネントの場合、ベースコンポーネントから継承した値が、親での宣言順に従って先に展開されます。その後、ローカルの非オーバーライド変数が宣言された順に展開されます。継承した値を無効にするローカル変数は、継承値の展開順序と同じ順で継承値の代わりに展開されます。したがって、オーバーライド変数が参照できるのは、すでに宣言されているほかの継承変数またはオーバーライド変数だけです。たとえば、ベースコンポーネント A が xy という変数を宣言するとします。さらに、派生コンポーネント B が変数 zy を宣言します。コンポーネント B で変数が評価される順番は、コンポーネント A から継承した x、続いてコンポーネント B によってオーバーライドされた y、最後にコンポーネント B のローカル変数である z です。


例 6–1 単純置換変数の使用方法

次の表に、置換変数、対応する展開後の値、未展開の値の例を示します。

変数名 

未展開の値 

展開後の値 

foo

silly

silly

bar

:[foo]

silly

baz

a :[foo] :[bar] example

a silly silly example

badFrob

:[frob]

エラー – 順参照 

frob

:[[foo]

:[foo]

compName

:[sys.name]

ターゲットコンポーネント名 

badFoz

:[foz]

エラー – foz が未宣言


外部コンポーネント置換変数参照

変数設定値には、1 つ以上の外部コンポーネント置換参照を含めることができます。外部コンポーネント置換参照は、次のいずれか 1 つです。

外部コンポーネント置換参照には空白が含まれないことに注意してください。

primary-component は次のいずれか 1 つです。

secondary-component は次のいずれか 1 つです。

secondary-component-list は、コロンで区切った 1 つ以上の secondary-components の列です。

varname は、事前定義の置換変数名または参照先コンポーネントによって宣言される動的置換変数名のいずれかです。

明示的な外部コンポーネントの展開

explicit-external-component は、特定の場所の特定のホストにインストールされる予定のコンポーネントを明示的に指定します。インストール型コンポーネントターゲッタ <installedComponent> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

explicit-external-component の構文は次のとおりです。


component-target:explicit-component-reference

component-target では、特定のコンポーネントをインストールするホストを指定します。次のいずれか 1 つです。

explicit-component-reference は、component-target で指定したターゲットホストにすでにインストールされているコンポーネントに対する参照です。explicit-component-reference では最小限、インストールするコンポーネントの名前を含めますが、次のように、バージョンとインストールパスも指定できます。


full-component-name
full-component-name#version
full-component-name@{path}
full-component-name#version@{path}

full-component-name は、指定したコンポーネントに対する絶対参照または相対参照です。相対参照は、explicit-component-reference が含まれているプランまたはコンポーネントとの関係に基づいて展開されます。

path は、指定したコンポーネントの絶対インストールパス名、または拡張時に指定したコンポーネントの絶対インストールパスを表す置換変数参照です。path} 記号が含まれる場合は、}} シーケンスを使用してエスケープする必要があります。

システムサービスコンポーネントの展開

system-service-component は、現在のターゲットのルートphysical hostにインストールされる予定のシステムサービスコンポーネントを指定します。インストール型コンポーネントターゲッタ <systemService> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

system-service-component の構文は、次のとおりです。


systemService:system-service-name

システムサービスがプラグインによって定義される場合、定義するプラグインの名前を system-service-name の接頭辞にする必要があります。

システムタイプコンポーネントの展開

system-type-component は、特定の場所の特定のホストに最後にインストールした、特定のコンポーネントタイプから派生したコンポーネントを指定します。インストール型コンポーネントターゲッタ <systemType> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

system-type-component の構文は、次のとおりです。


systemType:component-type-name
systemType:component-type-name@{path}
systemType(host-redirect):component-type-name
systemType(host-redirect):component-type-name@{path}

path は省略可能です。path を指定する場合は、指定したコンポーネントの絶対インストールパス名または置換変数参照です。展開された参照は、指定したコンポーネントの絶対インストールパスを表します。path} 記号が含まれる場合は、}} シーケンスを使用してエスケープする必要があります。

host-redirect も省略可能です。コンポーネントのインストール先ホストを指定します。「ホストリダイレクト」を参照してください。

コンポーネントタイプがプラグインによって定義される場合、定義するプラグインの名前を component-type-name の接頭辞にする必要があります。

targetableComponent コンポーネントの展開

targetableComponent は、ターゲット可能コンポーネントに関連付けられる変数を参照し、<targetableComponent> ターゲッタと類似しています。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

targetable-component の構文は、次のとおりです。

host-redirect はコンポーネントのターゲットホストの名前です。指定しなかった場合、現在プランが実行されているホストが使用されます。これらの構文は、特定のコンポーネントのターゲットホストに関連付けられているターゲット可能コンポーネントに解決されます。「ホストリダイレクト」を参照してください。

二次コンポーネントの展開

入れ子になったコンポーネントの展開

nested-component は、現在のコンポーネントで宣言された入れ子のコンポーネント参照によって参照されるコンポーネントを指定します。インストール型コンポーネントターゲッタ <nestedRef> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

nested-component の構文は、次のとおりです。


nestedRef:component-reference-name

component-reference-name は、現在のコンポーネントで installMode=NESTED の場合、<componentRef> 要素の名前です。

nested-component を使用できるのは、現在のコンポーネントが複合コンポーネントの場合だけです。また、外部コンポーネント置換参照が複合コンポーネントに含まれる場合、primary-component としての使用に限定されます。primary-component として使用する場合は、コンポーネント変数のデフォルト値またオーバーライド変数設定として使用することはできません。これは、参照対象のコンポーネントが変数の評価時点ではまだインストールされていないからです。

上位レベルコンポーネントの展開

toplevel-component は、現在のコンポーネントで宣言された上位レベルコンポーネント参照によって参照されるコンポーネントを指定します。インストール型コンポーネントターゲッタ <toplevelRef> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

toplevel-component の構文は、次のとおりです。


toplevelRef:component-reference-name
toplevelRef:component-reference-name@{path}
toplevelRef(host-redirect):component-reference-name
toplevelRef(host-redirect):component-reference-name@{path}

component-reference-name は、現在のコンポーネントで installMode=TOPLEVEL の場合、<componentRef> 要素の名前です。

path は、指定したコンポーネントの絶対インストールパス名または置換変数参照です。展開された参照は、指定されたコンポーネントの絶対インストールパスを表します。path} 記号が含まれる場合は、}} シーケンスを使用してエスケープする必要があります。

host-redirect は、参照対象のコンポーネントがインストールされる予定のホストです。host-redirect の構文については、「ホストリダイレクト」を参照してください。

toplevel-component を使用できるのは、現在のコンポーネントが複合コンポーネントの場合だけです。また、複合コンポーネントに外部コンポーネント置換参照が含まれる場合、primary-component としての使用に限定されます。primary-component として使用する場合は、コンポーネント変数のデフォルト値またオーバーライド変数設定として使用することはできません。これは、参照対象のコンポーネントがすでにインストールされているからです。

依存先コンポーネントの展開

dependee-component は、<createDependency> ステップで生まれた依存関係の結果として、現在のコンポーネントが依存するコンポーネントを指定します。dependee-component には、インストール型コンポーネントターゲッタ <dependee> のコンポーネント解決セマンティックスが含まれます。『N1 Grid Service Provisioning System 5.0 XML スキーマリファレンスガイド』「インストール済みコンポーネントターゲッター」を参照してください。

dependee-component の構文は、次のとおりです。


dependee:dependency-name

dependency-name は、現在のコンポーネントによって作成された依存関係の名前です。

コンポーネントに外部コンポーネント置換参照が含まれる場合、dependee-componentprimary-component としての使用に限定されます。primary-component として使用する場合は、コンポーネント変数のデフォルト値またオーバーライド変数設定として使用することはできません。これは、変数の評価時点では、依存関係がまだ埋まれていないからです。

コンテナコンポーネントの展開

container-component は、現在のコンポーネントが入れ子の参照として含まれるコンポーネントを指定します。

container-component の構文は、次のとおりです。


container

別の「コンテナ」コンポーネントにより、入れ子コンポーネントとしてすでにインストールされているコンポーネントに、外部コンポーネント置換参照が含まれる場合、container-component は、primary-component としての使用に限定されます。

外部コンポーネント置換参照の解決

外部コンポーネント置換参照の値は、最初に、primary-component が参照するコンポーネントを解決することで計算されます。secondary-componentprimary-component として使用している場合は、primary-component を解決するときに使用される最初の現在のコンポーネントとして、外部コンポーネント置換参照を含むコンポーネントが使用されます。さらに、primary-component によって解決されたコンポーネントが、新しい現在のコンポーネントになります。次に、secondary-component-list に含まれている各 secondary-component が、最後に解決されたコンポーネントを現在のコンポーネントとして使用することで解決されます。最後に、プロビジョニングシステムは最後に解決されたコンポーネントで変数 varname を検索して返します。

外部コンポーネント置換参照の値は、コンポーネントのインストール時に参照先コンポーネントに指定されていた変数の値に基づいて計算されます。インストール済みのコンポーネントで宣言されていない変数、またはターゲットホストにインストールされていないコンポーネントは、参照することはできません。また、外部コンポーネント置換参照を宣言したコンポーネントまたはプランがアクセスできない変数を参照することもできません。変数にアクセスできるのは、その変数がアクセス可能なアクセスモードで宣言され、宣言するコンポーネントがアクセス可能で、なおかつそのコンポーネントに到達するまでにたどる基本コンポーネントと二次コンポーネントのそれぞれがアクセス可能な場合に限られます。

外部コンポーネント置換参照は、プランの実行開始時ではなく、実行中に検出された時点で計算されます。したがって、プランでそれまでに実行されたステップに応じて、参照対象である、実際にインストールされたコンポーネントが変化する可能性があります。さらに、現在のターゲットホスト以外のホストにインストールされたコンポーネントを参照する場合は、他方のホストで同時に実行されている他のプランによって影響を受ける可能性があります。予測可能な結果を保証するには、現在のプラン実行のターゲットセットに含まれているホストに参照を限定してください。これらのホストは確実にロックされているからです。さらに、再ターゲットまたはシリーズの実行モードを使用することによって、プラン内の外部参照を受けるホストでの <install> または <uninstall> 動作の同期を取ります。


例 6–2 外部コンポーネント置換変数参照の使用


セッション置換変数の参照

Session variablesを使用すると、ユーザーセッションごとに 1 回ずつ、WebLogic 資格などのデータを入力できます。これらの変数の内容は、セキュリティを保護して保存することもできるので、ログインのたびにデータを再入力しなくてすみます。セッション変数は、置換変数を使用することによって、モデル化レベルで組み込まれます。

セッション置換変数参照の構文は、次のとおりです。


:[session:varname]

varname はセッション変数名です。

セッション置換変数参照は、現在のユーザーセッションのセッション変数値に解決されます。現在のユーザーセッションで定義されていないセッション変数を解決しようとすると、エラーが発生します。セッション変数生成エラーが検出されると、ユーザーの現在のセッション変数セットに、値が空のセッション変数を追加することが試行されます。

セッション変数は、単純置換変数参照を使用できるところであれば、どこでも使用できます。しかし、別のセッション変数の値にセッション変数を使用することはできません。

事前定義のセッション変数

sys:sessionID は、現在のユーザーセッションの ID に解決される、事前定義セッション変数です。システム sessionID 変数を使用すると、プランを実行したユーザーと同じ資格で、CLI を介して master server にコールバックするステップを作成できます。システム sessionID 変数は、config.allowSessionIDOnHosts 構成変数に基づき、特定のホストのコンテキストに限って解決できます。したがって、システム sessionID 変数を解決できるのは、現在の生成コンテキストのターゲットホストが config.allowSessionIDOnHosts 構成変数によって指定されたホストに含まれている場合だけです。

プランの実行時にコールバックで使用できるように CLI を設定する場合は、同じサーバーに Remote Agent と CLI Client をインストールする必要があります。最大限のセキュリティ保護を実現するには、Master Server と同じサーバー上に CLI Client と Remote Agent をインストールしてください。この場合、CLI を介してコールバックを行うプランおよびコンポーネントは、<retarget> ステップを使用して CLI が含まれている 1 つのホストに実行をリダイレクトします。さらに、<retarget> ステップのあとでシステム sessionID 変数が解決され、構成変数 config.allowSessionIDOnHosts は、Master Server ホストだけを指定するようになります。

ターゲット置換変数の参照

ターゲット置換変数を使用すると、特定のホストから値を直接取得できます。

ターゲット置換変数参照の構文は、次のとおりです。


:[target:varname]
:[target(host-redirect):varname]

target から始まる変数名は、プランが現在実行されている論理ホストを表します。

varname は、属性値を表します。この属性値は、インストールするアプリケーション用のターゲットホストの定義で指定されています。参照できるホスト変数は、事前定義ホスト変数と動的ホスト変数の 2 種類です。「事前定義ホスト変数名」「動的ホスト変数名」を参照してください。

host-redirect も指定した場合、varname の値は特定のホストから取得されます。そのホストは、現在プランを実行しているホストでなくてもかまいません。hostname に別の置換変数を指定することもできます。この場合は展開時に、ホスト名に解決されます。host-redirect の構文については、「ホストリダイレクト」を参照してください。

事前定義ホスト置換の短縮形

ホスト置換参照を使用できるところであれば、どこでも事前定義ホスト置換の短縮形を使用できます。

ホストリダイレクト

ターゲットホスト置換変数の参照と外部コンポーネント置換変数の参照には、ホストリダイレクトを任意で組み込むことができます。この場合、変数またはコンポーネント検索が行われるホストは、現在のターゲットではなく、指定されたホストになります。host-redirect の形式は、次のいずれかです。

hostname は、ホスト名、または展開時にホスト名に解決される置換変数参照のどちらかです。

parent-ref は次のいずれか 1 つです。

parent-ref 演算子は主に、virtual hostsに使用しますが、物理ホストにも使用できます。物理ホストに両方の演算子を適用すると、無操作になります。


例 6–3 ターゲット置換変数参照の使用


事前定義ホスト変数名

事前定義ホスト変数名は、参照されるホストに関連付けられる属性を示します。


例 6–4 ホスト置換変数参照の使用

次に、ホスト置換変数参照と対応する値の例を示します。


動的ホスト変数名

動的ホスト変数名は、参照されたホストのhost typeによって宣言された、任意の属性名です。この場合、変数参照で置換される値は、参照されたホストで定義されている属性の対応する値です。該当する場合、値を展開してから置換する必要があります。