多くのアプリケーションは、インストールされ実行されるホストにかかわらず、ホスト固有の情報を含むおそらく 1 つの構成ファイルを除いて、ほぼ同じです。 これらの構成ファイルには通常、インストール先のホストに固有の値や、ホストやホストセットごとにカスタマイズされた値が含まれています。 たとえば、QA/テスト、ステージング/バーンイン、実稼動などの異なる配備環境が存在する場合があります。 これらの各環境で使用される構成値は異なると考えられます。 N1 Service Provisioning System software は、各配備環境で使用する変数値を含む複数の変数設定オブジェクトの定義を実現することで、これらの各環境の配備をより簡単なものにします。
N1 Service Provisioning System software で複数のホストにアプリケーションを配備するプランを実行する場合は、構成生成機能によって、各ホストに適した構成値を自動的に挿入できます。 プロビジョニングソフトウェア は、ユーザーが作成した構成ファイルのテンプレートを構文解析することで、自動挿入を実現します。
自動挿入を行うには、置換変数定義をコンポーネントに追加します。 これらはたとえば、アプリケーションをインストールするディレクトリを構成する手段として利用できます。 また プロビジョニングソフトウェア を使用すると、各対象ホストへアプリケーションを配備するための複数の変数設定を定義、管理することができます。
コンポーネントの各バージョンは、それぞれ変数定義を宣言できます。
コンポーネントの各バージョンは、それぞれ変数設定を持ちます (旧バージョンからインポートする場合もあります)。
各コンポーネントは、どの変数設定を使用してもインストールできます。
プロビジョニングソフトウェア がアプリケーションのインストール時に置き換える値は、以下のどれかです。
ユーザーが指定する値
名前やラベルなどコンポーネント固有の値
IP 番号やホスト名などホスト固有の値
対象ホストに固有の値
以前にインストールされたコンポーネントに関連する値
セッション変数の値
変数は、対象ホスト上で対象手順が実行されたときに、置換されます。 手順は、プラン内、対象ホストにインストール中のコンポーネント内、 または対象ホストにインストール済みのコンポーネント内に含まれる場合があります。 対象ホストとコンポーネントの状態は、特定の置換変数の値を決めるために使用されます。以下に例をあげます。
対象コンポーネント。インストールされるコンポーネント
対象ホスト。プランが実行されるホスト
対象変数設定ソース。コンポーネントに定義されたデフォルト値を無効にする名前と値のペアの集合
局所変数。包含するたブロックやプラン内で宣言したものなど、対象手順自体の中にある変数
コンポーネントの作成時または編集時には、事前定義した変数定義を使用したり、ユーザーのニーズに合ったカスタム定義を作成したりすることができます。
変数の置換は、以下の構文で定義します。
:[variable] |
ここで、variable はホスト固有の値と置換するパラメタです。
コンポーネント内で定義できる変数は、基本的に 4 種類あります。
単純置換変数
外部コンポーネント置換変数
セッション変数置換
対象置換変数
単純置換は、後で同じコンポーネント内で参照する変数を定義するために使用します。
単純置換変数は、以下の構文を使用します。
:[variable] |
ここで、variable は以下のうちの 1 つです。
局所変数名。局所変数名は、プラン内の手順やコンポーネントのインストール、アンインストール、制御サービスブロック内の手順で使用できます。
パラメタ名。パラメタ名は、プラン内の手順やコンポーネントのインストール、アンインストール、制御サービスブロック内の手順で使用できます。
事前定義したコンポーネント変数名。事前定義したコンポーネント変数は、コンポーネントに関連する入力ソース内でのみ使用でき、プランでは使用できません。
ベースコンポーネント内で変数が参照された場合も、事前定義したコンポーネント変数は、常にインストールされている (またはインストール中の) 実際のコンポーネントに対して解釈処理されます。 アクセス可能性の観点から、事前定義されたコンポーネント変数は public 変数として処理されます。
事前定義されたコンポーネント変数名の一覧については、「コンポーネントおよび構成ファイルの事前定義された置換変数」を参照してください。
動的コンポーネント変数名。動的コンポーネント変数は、コンポーネントに関連する入力ソース内でのみ使用でき、プランでは使用できません。
動的コンポーネント変数名は、対象コンポーネントの関連コンポーネントによって宣言された変数名です。 この場合、変数参照と置き換えられる値は、関連のある優先変数の設定値またはコンポーネントによって定義されたデフォルト値です。この変数の値は、置換される前に展開されます。
変数設定値には、数の制限なしに外部コンポーネント置換参照を含めることができます。 外部コンポーネント置換参照は、以下のどちらかです。
:[primary-component:varname] :[primary-component:secondary-component-list:varname] |
外部コンポーネント置換参照には、空白は含まれません。
上の primary-component は、以下のどちらかです。
explicit-external-component secondary-component |
また secondary-component は、以下のどれかです。
nested-component toplevel-component dependee-component |
secondary-component-list は、コロンで区切られた 1 つ以上の secondary-component のシーケンスです。
varname は、事前定義された置換変数名、または参照コンポーネントによって宣言された動的置換変数名です。
explicit-external-component は、特定の場所の特定のホストにインストールする予定のコンポーネントを明示的に指定し、第 2 章「インストール済みコンポーネント」で説明されている <installedComponent> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 構文は以下のとおりです。
component-target:explicit-component-reference |
上の component-target は目標コンポーネントをインストールするホストを指定し、以下のどちらかになります。
component component(host-redirect) |
最初の派生関数は、生成コンテキスト内の現在の対象ホストを指定します。 2 番目の派生関数は、ホストの切り替えの説明どおり、host-redirect によって指定された ROX ホスト を指します。
上の 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 を含むプランまたはコンポーネントに相対して展開されます。 パスは、目標コンポーネントのインストールパスを表す絶対パス名、または展開時に目標コンポーネントの絶対インストールパスを表す置換変数参照です。 絶対パス名に「}」が含まれる場合は、「}}」としてエスケープしなければなりません。
nested-component は、現在のコンポーネントによって宣言された入れ子コンポーネント参照によって参照されるコンポーネントを指定し、第 2 章「インストール済みコンポーネントターゲッター」で説明されている <nestedRef> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 構文は以下のとおりです。
nestedRef:component-reference-name |
上の component-reference-name は、現在のコンポーネント内の「NESTED」 installMode を持つ <componentRef> 要素の名前です。
nested-component を使用できるのは、現在のコンポーネントが複合コンポーネントの場合だけです。また、複合コンポーネント内に外部コンポーネント置換参照がある場合は、primary-component としてのみ使用できます。 変数の評価時には参照コンポーネントがインストールされていないので、primary-component として使用する場合は、コンポーネント変数のデフォルト値または優先変数設定として使用することはできません。
toplevel-component は、現在のコンポーネントによって宣言された最上位コンポーネント参照によって参照するコンポーネントを指定し、第 2 章の「インストール済みコンポーネントターゲッター」で説明されている <toplevelRef> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 書式は以下のどれかです。
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 は、現在のコンポーネント内の "TOPLEVEL" installMode を持つ <componentRef> 要素の名前です。
上の path と host-redirect は、それぞれ参照コンポーネントがインストールされる予定の場所とホストです。 host-redirect の構文は、「ホストの切り替え」の項で説明されています。
toplevel-component を使用できるのは、現在のコンポーネントが複合コンポーネントの場合だけです。また、複合コンポーネント内に外部コンポーネント置換参照がある場合は、primary-component としてのみ使用できます。 primary-component として使用される場合は、参照コンポーネントがすでにインストール済みでないかぎり、コンポーネント変数のデフォルト値または優先変数設定として使用することはできません。
dependee-component は、<createDependency> 手順によって作られた依存関係の結果、現在のコンポーネントが依存しているコンポーネントを指定し、第 2 章「インストール済みコンポーネントターゲッター」で説明されている <dependee> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 構文は以下のとおりです。
dependee:dependency-name |
上の dependency-name は、現在のコンポーネントによって作成された依存関係の名前です。
外部コンポーネント置換参照がコンポーネント内にある場合、dependee-component は primary-component としてしか使用できません。 変数の評価時に依存関係が確立していないので、primary-component として使用する場合は、コンポーネント変数のデフォルト値または優先変数設定として使用することはできません。
system-service-component は、現在の対象の物理的なルートホストにインストールされる予定のシステムサービスコンポーネントを指定し、第 2 章「インストール済みコンポーネントターゲッター」で説明されている <systemService> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 構文は以下のとおりです。
systemService:system-service-name
system-type-component は、特定の場所の特定のホストに一番最近インストールされたあるコンポーネント型から派生したコンポーネントを指定し、第 2 章の「インストール済みコンポーネントターゲッター」で説明されている <systemType> インストール済みコンポーネントターゲッターのコンポーネント解釈処理意味論を持っています。 書式は以下のとおりです。
systemType:component-type-name
systemType:component-type-name@{path}
systemType(host-redirect):component-type-name
systemType(host-redirect):component-type-name@{path}
ここでは path はオプションです。指定された場合は、目標コンポーネントをインストールするパスを示します。 host-redirect もオプションです。これは、ホストの切り替えの説明どおり目標コンポーネントがインストールされるホストを示します。
container-component は、入れ子参照として現在のコンポーネントを含むコンポーネントを指定します。 構文は以下のとおりです。
container |
外部コンポーネント置換参照が、他の「コンテナ」コンポーネントによって入れ子コンポーネントとしてインストールされたコンポーネント内にある場合、container-component は primary-component としてしか使用できません。
外部コンポーネント置換参照の値は、まず primary-component が参照するコンポーネントを解釈処理することによって計算されます。 secondary-component が primary-component として使用された場合、外部コンポーネント置換参照を含む現コンポーネントは、primary-component の解釈時に使用される初期現コンポーネントとして機能します。 primary-component によって解釈処理されたコンポーネントは、新しい現コンポーネントになります。 次に、secondary-component-list 内の secondary-component が、最後に解釈処理されたコンポーネントを現コンポーネントとして使用して、解釈処理されます。 その後、最後に解釈処理されたコンポーネント内の varname という変数が検索され、返されます。
外部コンポーネント置換参照の値は、インストール時点の参照コンポーネント内の指定された変数の値をもとに計算されます。 インストール済みコンポーネントによって宣言されたのではない変数名や、対象ホストにインストールされていないコンポーネントを参照してはなりません。 また、外部コンポーネント置換参照を宣言するコンポーネントやプランからアクセスできない変数も参照しないでください。 変数にアクセスできるのは、変数がアクセス可能アクセスモードで宣言され、コンポーネントを宣言するコンポーネントにアクセスでき、そのコンポーネントに到達するために通るプライマリコンポーネントとセカンダリコンポーネントそれぞれにアクセスできる場合だけです。
外部コンポーネント置換参照は、プラン実行中に出現したときに計算されます (プラン実行の開始時ではありません)。 したがって、参照される実際のインストール済みコンポーネントは、プラン内で以前実行された手順をもとに変更されている場合があります。 さらに、現在の対象ホスト以外のホストにインストールされたコンポーネントへの参照は、他のホストで同時に実行されている他のプランから影響を受ける場合があります。 予想可能な結果を得るためには、クライアントは、現在のプラン実行の対象セット内に含まれる参照ホストだけを参照し (それらがロックされていることを保証して)、目標再設定または一括実行モードもしくはその両方を使用してプラン内の外部から参照されているホスト上のインストール/アンインストール操作をすべて同期する必要があります。
以下に、明示的な外部コンポーネントを使用した外部コンポーネント置換参照の例をいくつか挙げます。
:[component:installApache:label] :[component:jdk#1.3:classpath] :[component:webApp#2.4@{/usr/local}:bannerColor] :[component(/):IIS global settings:install_path] :[component:webApp@{:[webAppPath]}:bannerColor] |
2 番目以降の例では、現在の対象ホストの物理的なルートホストにインストールされたコンポーネントが解釈処理されます。
最後の行では、webAppPath が、外部から参照されているコンポーネント内で定義された変数としてではなく、生成コンテキストの関連コンポーネント内の単純置換変数セットの名前として解釈処理されます。
以下に、入れ子コンポーネントまたは最上位コンポーネントを使用した外部コンポーネント置換参照の例をいくつか挙げます。
:[nestedRef:ref1:label] :[toplevelRef:ref2:name] :[toplevelRef(/):ref3@{/usr/local}:var1] |
次に、依存先コンポーネントを使用した外部コンポーネント置換参照の例を挙げます。
:[dependee:app2domain:domainName] |
セッション変数を使用すると、ログインセッション中に 1 回、WebLogic 資格などのデータを入力できます。 また、ユーザーは、ログインごとに再入力しなくてすむように、これらの変数の内容をセキュアに保存できます。 セッション変数は、置換変数を使用してモデル化レベルで統合されます。 セッション変数の構文は、以下のとおりです。
session:varname |
上の varname は、セッション変数の名前です。
session:varname という書式のセッション変数参照は、現在のユーザーのセッション内のセッション変数の値に解釈処理されます。 現在のユーザーのセッションに定義されていないセッション変数を解釈処理しようとすると、セッション変数が定義されていないことを示すエラーが発生します。 セッション変数を生成できなかった場合は、ユーザーの現在のセッションの変数セットに空の値を持つセッション変数を追加しようとする試みが行われます。
セッション変数は、単純置換変数参照が使用できるところであればどこでも使用できます。 ただし、他のセッション変数の値の中では使用できません。
対象置換変数を使用すると、特定のホストから値を直接取得できます。
対象置換変数の構文は、以下のとおりです。
:[target:varname] :[target(hostname):varname] |
target で始まる変数名は、現在プランが実行されている論理ホストを指します。
コロンの後に追加する varname パラメタは、対象ホストの定義でインストール中のアプリケーションのために指定された属性値を表します。
target の直後に (hostname) を指定した場合、varname の値は特定のホストから検出されます。このホストは現在プランが実行されているホストとは別のホストでもかまいません。 また、展開時にホストの名前に解釈処理される hostname の置換変数を指定することもできます。
ホストの切り替え
ホスト置換参照と外部コンポーネント置換参照には、ホストの切り替えをオプションで含めることができます。ホストの切り替えでは、変数やコンポーネントが検索されるホストが、現在の対象から指定ホストに切り替えられます。 ホストの切り替えの書式は、以下のどれかです。
parent-ref hostname hostname/parent-ref
ここで hostname は、ROX ホストの名前か、展開時に ROX ホストの名前に解釈処理される置換変数参照です。
parent-ref は、指定されたホスト (hostname が省略された場合は現在の対象ホスト) のルート親ホストを意味する「/」、または指定されたホスト (hostname が省略された場合は現在の対象ホスト) の n 番目の親を意味する 1 つ以上のスラッシュで区切られた「..」となります。「n」は、表示された「..」の数です。 parent-ref 演算子は、主に仮想ホストで使用されるためのものですが、物理ホストでも使用できます。 物理ホストにどちらかの演算子を適用すると、ノーオペレーション (空命令) となります。
以下に、対象置換変数の使用例をいくつか挙げます。
この例では、ホスト myHost 上で変数 var1 を検索します。
:[target(myHost):var1] |
この例では、置換変数 hostName で指定されるホスト上で変数 var1 を検索します。
:[target(:[hostName]):var1] |
この例では、プランを実行中の論理ホスト上で変数 var1 を検索します。
:[target:var1] |
対象ホストに対して事前定義される変数は、以下のとおりです。
name – 対象ホストの名前
description – 対象ホストの説明
hostTypeName – 対象ホストのホスト型の名前
raIP – 対象ホスト上の遠隔エージェントの IP アドレス
raPort – 対象ホスト上の遠隔エージェントが使用するポート
raHomeDir - 対象ホスト上の遠隔エージェントのホームディレクトリの絶対パス
raDataDir - 対象ホスト上の遠隔エージェントのデータディレクトリの絶対パス
raTmp Dir - 対象ホスト上の遠隔エージェントの一時ディレクトリの絶対パス
raConfigDir - 対象ホスト上の遠隔エージェントの構成ディレクトリの絶対パス
事前定義された変数以外に、 対象ホストのホスト型によって宣言されたホスト属性も参照できます。
以下に、apache のコンポーネントで定義された変数の一覧の例を示します。
<varList> <var name="domainname" default=":[target: domainname]" /> <var name="name" default="apache" /> <var name="installPath" default="/opt/apache" /> <var name="execNativeShutdown" default=":[installPath]/bin/apachectlstop" /> <var name="execNativeStartUp" default=":[installPath]/bin/apachectlstart" /> </varList> |
このコンポーネントは、ドメイン名が対象ホストから動的に検出されることを指定し、「name」のデフォルト値に「apache」を定義した後、2 つの execNative 変数の定義で使用する変数 installPath の値を指定します。
構成ファイル内で対象置換変数を使用することはできませんが、構成ファイル内からホスト固有の値を参照することは可能です。 これは、参照する変数の値がホスト固有の値として計算される場合があるからです。 たとえば、コンポーネントの <varList> セクション内に以下の変数を定義したとします。
<var name="pants" value=":[target:pie]"> |
ここで構成ファイル内から :[pants] を参照します。 :[pants] は、対象ホストによって定義された pie 変数の値と置き換えられます。
:[/] と :[/] という短縮形は、ホスト置換参照を使用できるところではどこでも使用できます。
:[/] という短縮形は、現在の対象ホストの物理的なルートホストのオペレーティングシステム固有のファイル区切り文字に展開されます。 たとえば、UNIX ベースのオペレーティングシステムでは「/」に展開され、Windows では「\」に展開されます。
:[:] という短縮形は、現在の対象ホストの物理的なルートホストのオペレーティングシステム固有のパス区切り文字に展開されます。 たとえば、UNIX ベースのオペレーティングシステムでは「:」に展開され、Windows では「;」に展開されます。
単純置換変数は、構成ファイルを含むすべての入力ソースで使用できます。 また外部コンポーネント置換変数と対象置換変数は、installSteps、uninstallSteps、controlService、executionPlans の varList/var のデフォルト値など多くの場合に使用できます。
以下に、どの入力ソースでどの種類の置換変数を使用できるかを列挙した完全な一覧を示します。
入力ソース |
使用可能な変数の種類 |
---|---|
<component>/<varList>/<var>/default attribute variable settings override value |
|
入力ソース |
使用可能な変数の種類 |
---|---|
<component>/<resourceRef>/<resource> <component>/installPath |
|
入力ソース |
使用可能な変数の種類 |
---|---|
<component>/<diff>/<ignore> 構成ファイル |
コンポーネント置換参照 |
入力ソース |
使用可能な変数の種類 |
---|---|
<executionPlan>/<paramList>/<param>/default attribute |
セッション変数参照 |
入力ソース |
使用可能な変数の種類 |
---|---|
<executionPlan>/*/child steps |
|
入力ソース |
使用可能な変数の種類 |
---|---|
hostAttributes |
セッション変数参照 |
以下のコンポーネント構成属性は、その属性の右にある置換変数の定義を含むことができます。
親要素 |
置換可能な属性 |
---|---|
capture/addFile component installSpec |
displayName installPath name |
installSpec |
path |
installSpec |
permissions |
installSpec |
user |
installSpec installSpec installSpec |
group deployMode diffDeploy |
diff/ignore |
path |
varList/var |
default |
paramList/param |
default |
capture/addFile |
path |
以下のコンポーネントまたはプラン内の手順の構成属性は、その属性の右にある置換変数の定義を含むことができます。
親要素 |
置換可能な属性 |
---|---|
argList/arg |
value |
execJavaexecJavaexecNative |
classNameclassPathdir |
execNative/ouputFile |
name |
execNative/errorFile |
name |
execNative/env |
name |
execNative/env |
value |
execNative/exec |
cmd |
execNative/exec/arg |
value |
execNative/shell |
cmd |
execNative/shell |
<body> |
execNative/successCriteria |
outputMatches |
execNative/successCriteria |
errorMatches |
execNative/inputText |
<body> |
execNative/inputFile |
name |
execNative if/condition/istrue if/condition/equals if/condition/equals if/condition/matches if/condition/matches |
userToRunAs value value1 value2 value pattern |
processTest |
processNamePattern |
processTest raise retarget retarget/varList/var |
user message host default |
sendCustomEvent |
message |
transform |
input |
transform |
output |
transform/stylesheet |
<body> |
transform/subst |
match |
transform/subst |
replace |
transform/source |
name |
uninstallComponent |
installPath |
urlTest |
url |
urlTest |
pattern |
以下のプラン構成属性は、その属性の右にある置換変数の定義を含むことができます。
親要素 |
置換可能な属性 |
---|---|
varList/var |
default |
以下のインストール済みコンポーネントターゲッター構成属性は、その属性の右にある置換変数の定義を含むことができます。
親要素 |
置換可能な属性 |
---|---|
installedComponent installedComponent systemType systemType toplevelRef toplevelRef |
installPath host installPath host installPath host |
以下のリポジトリコンポーネントターゲッター構成属性は、その属性の右にある置換変数の定義を含むことができます。
親要素 |
置換可能な属性 |
---|---|
component toplevelRef |
host host |
置換変数 (:]) に定義されたシーケンスと同じシーケンスをなんらかの理由で構成ファイルに記述する場合は、シーケンスの後ろに [ をもう 1 つ記述することでシーケンスをエスケープできます。 たとえば、:[pants] というテキストを構成ファイルに記述し、N1 Service Provisioning System software が pants を他の値に置き換えないようにするためには、:[[pants] と記述します。
構成ジェネレータは、ファイル内のすべての :[[ を :[ に置き換えます。
置き換えたい変数の入力ソースが XML で記述されたコンポーネントの属性の場合は、以下のような XML ベースのエスケープシーケンスの一般的な規則を使用します。
文字 |
エスケープシーケンス |
---|---|
" |
" |
` |
' |
< |
< |
|
> |
& |
& |
N1 Service Provisioning System software は、コンポーネントおよび構成ファイルで使用するための事前定義された置換変数を提供します。
name – コンポーネントの名前
description – コンポーネントの説明
label – コンポーネントのラベル
softwareVendor – コンポーネントのソフトウェアベンダー
author – コンポーネントの作者
path - コンポーネントのパス
path 変数は、文末にスラッシュ (/) が常に入ること以外は、コンポーネントの path 属性と同じです。 path 変数を name 変数と直接組み合わせると、以下のようにコンポーネントの完全な名前を記述できます。
:[path]:[name]
rsrcInstallPath - コンポーネントリソースがインストールされた場所
rsrcInstallPath 変数は、コンポーネントがインストールされている (またはインストール中の) 遠隔エージェントのファイル書式で表されます。 この変数は、単純コンポーネントに対してのみ定義されます。 rsrcInstallPath 変数の値は、他の動的コンポーネント変数の計算を必要とする場合があるので、コンポーネント変数のデフォルト値または変数設定の優先指定値内では使用できません。 同じ理由から、
<component installPath 属性または <resourceRef> / <installSpec> 要素属性の値の中でこの変数を使用することはできません。これらの制限によって、循環参照が防止されます。
変数の名前と定義では、大文字と小文字が区別されます。