条件の使用
Oracle Cloud Stackテンプレートを編集し、異なる条件でスタックを作成する方法をカスタマイズします。
条件付き関数の使用
Oracle Cloud Stackはこれらの条件関数をサポートしています: Equals、GreaterThan、LessThan、Contains、Empty、Match、Not、And、Or。
これらの関数は、スタックが作成される際にOracle Cloud Stackによって実行時に実行されます。 各関数は2つの入力文字列を評価し、テンプレート内の関数のロケーションに文字列trueまたは文字列falseを返します。 条件付き関数への入力は、GetParamなどの文字列を返すリテラル文字列または関数になります。
たとえば、3つのパラメータを含むテンプレート内のリソース定義を考えてみます。
myresource:
type: xyz
parameters:
dbEnabled: {"Fn::Equals":[{"Fn::GetParam":"dbVersion"},"12.2"]}
cacheEnabled: {"Fn::GreaterThan":[{"Fn::GetParam":"cacheSize"},"0"]}
backupEnabled: {"Fn::Not":[{"Fn::Equals":[{"Fn::GetParam":"container"},""]}]}これらの条件付き関数では、次のロジックが得られます。
-
dbVersionテンプレート・パラメータの値が、値"12.2"に設定された場合にのみ、dbEnabledパラメータは"true"に設定されます。 -
cacheSizeテンプレート・パラメータの値がゼロより大きい場合にのみ、cacheEnabledパラメータは"true"に設定されます。 -
containerテンプレート・パラメータの値が空の文字列でない場合にのみ、backupEnabledパラメータが"true"に設定されます。
詳細は、「関数一覧」を参照してください。
グローバル条件の定義
多くの場合、テンプレートの複数の場所で同じ条件式(cacheSizeがゼロより大きい)を使用する必要があります。 そのかわりに、これらの条件をテンプレート内の単一の場所に定義し、条件をテンプレート全体で参照することもできます。
テンプレート・ファイルのconditionsノード内のグローバル条件を定義します。 各条件に名前と、その値がtrueまたはfalseと評価される式を与えます。 例:
conditions:
includeMyApp: {"Fn::Equals":[{"Fn::GetParam":"dbVersion"},"12.2"]}
このサンプル・テンプレートは、dbVersionテンプレート・パラメータの値が "12.2"に等しい場合にのみ、値がtrueであるincludeMyAppという条件を定義します。
関数でのグローバル条件の使用
If関数を使用して、テンプレートの特定の場所でグローバル条件を評価します。 2つの文字列値と、グローバル条件の名前を指定します。 指定した条件がtrueと評価された場合、If関数は最初の値を返します。 それ以外の場合、関数は2番目の値を返します。
次の例では、includeMyApp条件がtrueの場合、リソースのshapeパラメータには値"oc3"が割り当てられます。条件がfalseの場合は値"oc4"が割り当てられます。
myresource:
type: xyz
parameters:
shape: {"Fn::If":["includeMyApp","oc3","oc4"]}If関数を使用すると、条件の評価後に現在のオブジェクト、属性またはシーケンス・アイテムを削除することもできます。 true引数またはfalse引数のいずれかに、変数OPC::NoValueを使用します。 この例では、useDB条件がfalseの場合に、dbServiceパラメータがこのリソースの定義から動的に削除されます。
myresource:
type: xyz
parameters:
clusterSize: 2
dbService: {"Fn::If":["useDB","MyOracleDB-1","OPC::NoValue"]}グローバル条件のリソースへの割当て
テンプレート内の各リソースには、グローバル条件の名前をオプションで割り当てることができます。 この条件がtrueと評価された場合、リソースはスタックの一部として作成されます。 falseと評価された場合、リソース(および依存するリソース)は作成されません。
condition属性を、リソースの定義内(parametersの後ろ)に配置します。 例:
resources:
myapp:
type: xyz
parameters:
param1: value1
param2: value2
condition: includeMyAppテンプレート・パラメータの条件の使用
また、テンプレート・パラメータまたはパラメータ・グループの定義内で、条件付き関数とグローバル条件を使用することもできます。 これらの条件は、スタックを作成するときにパラメータまたはグループをOracle Cloud Stackコンソールに表示するかどうかを制御します。 条件がfalseと評価された場合、パラメータまたはグループはユーザー・インタフェースで非表示になります。 trueと評価された場合、パラメータまたはグループが表示されます。 これらの条件は、ユーザーがテンプレート・パラメータの値を変更するたびに動的に再評価されます。
たとえば、boolean(チェックボックス)パラメータを使用して、別のパラメータがユーザーに表示されるかどうかを判断できます:
parameters:
useBackup:
label: Use Backup
type: Boolean
mandatory: false
default: false
backupPath:
label: Backup Path
type: String
condition: {"Fn::Equals":[{"Fn::GetParam":"useBackup"},"true"]}または、同じパラメータとグローバル条件を使用して、パラメータ・グループ全体がユーザーに表示されるタイミングを制御します:
parameters:
useBackup:
label: Use Backup
type: Boolean
mandatory: false
default: false
...
parameterGroups:
- label: Backup Configuration
parameters: [ backupPath, backupTime ]
condition: backupEnabled
conditions:
backupEnabled: {"Fn::Equals":[{"Fn::GetParam":"useBackup"},"true"]}