クラウドプロビジョニングとガバナンス での式の使用

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:14分
  • ポリシーアクションの式により、値を設定またはオーバーライドできます。詳細計画内の式は、リソースの属性にアクセスでき、値を要求フォームのフィールドにマップできます。式は、リソースブロック、詳細計画、ポリシー、および クラウドプロビジョニングとガバナンス でスクリプトが許可される任意の場所で使用できます。

    式の使用

    式は、システムで動的に生成された情報の値 (ユーザーがクラウドユーザーポータルで行った選択の値など) を保持できます。式は、リソースブロック、詳細計画、ポリシー、および クラウドプロビジョニングとガバナンス でスクリプトが許可される任意の場所で使用できます。

    リソースブロックでの式の使用

    各リソースブロック操作では、式を使用して各パラメーターの値を保持します。式では、ハードコードされた値、ユーザーがクラウドユーザーポータルでプロビジョニングするスタックからのデータ、CMDB のデータ、およびスクリプトから派生したデータを使用できます。デフォルトでは、クラウドプロビジョニングとガバナンス は、各リソースブロック操作に対して、一連のパラメーターとその式を生成します。

    たとえば、リソースが属するデータセンターを保持するパラメーター Location は、式 ${parameter.Location} を使用します。

    図 : 1. リソースブロック内の式
    リソースブロックの場所パラメーター
    詳細計画での式の使用

    詳細計画は、式を使用して、リソースブロックの各操作の入力パラメーターをマップできます。デフォルトでは、詳細計画には、リソースブロックで指定されているのと同じパラメーターと値が表示されます。

    式を使用して詳細計画属性にアクセスできます。[マッピング] 列の式は、ステップの各操作の詳細計画属性を定義します。たとえば、スタック要求フォームに表示される Location 属性は、{$parameter.Location} 式を使用してアクセスできます。${parameter.Location} の値を持つ Location パラメーターは、詳細計画操作を選択すると [入力] タブに表示されます。

    図 : 2. 詳細計画内の式
    Location パラメーターと式
    ポリシーアクションでの式の使用

    ポリシーアクションでは、式を使用して、ユーザーがクラウドユーザーポータルの要求フォームで送信するパラメーター値をオーバーライドできます。スタック操作でユーザーデータにアクセスしてオーバーライドすることもできます。たとえば、次の式を使用してスタックの名前を変更します。formData.Stackname = "your-naming-convention";

    図 : 3. ポリシースクリプト内の式
    ポリシーのスクリプト例

    式を使用して詳細計画属性にアクセスできます。[マッピング] 列の式は、ステップの各操作の詳細計画属性を定義します。たとえば、仮想マシンの要求フォームに表示される Location 属性には、式 {$parameter.Location} でアクセスします。

    式のタイプ

    定義式
    定義式は、事前バインディング (または静的バインディング) の一種です。これらのバインディングはコンパイル時バインディングを参照し、ユーザーがスタック要求フォームを送信したとき (スタックまたはリソースのプロビジョニングが開始されたとき) に評価されます。定義式は、 オーケストレーション中に生成されたデータにアクセスできません。定義式は中括弧で囲まれます。たとえば、${parameter.CloudAccount} のようになります。
    ランタイム式
    ランタイム式は、遅延バインディング (または動的バインディング) の一種です。これらのバインディングはランタイムバインディングを参照し、オーケストレーション中に作成されたデータにアクセスできます (スタックアイテムなど)。ランタイム式は、オーケストレーション実行中に呼び出されたときに評価されます。ランタイム式は、通常、テーブル内のデータをドット連結するために使用されます。ランタイム式は、括弧で囲まれます。たとえば、$(Stack.items[VM1].attributes[node_id]) のようになります。
    定義式/ランタイム式
    一部の式には、定義式とランタイム式の両方が含まれます。
    複合式
    任意のタイプの式を他の式内に入れ子にできます。

    定義式の構文と例

    許容される構文では、ドル記号と中括弧を使用します。次のタイプを使用できます。
    • ${parameter.}。このような式を使用して、詳細計画プロビジョニングなどのプロセスの入力属性から値を取得します。データはテーブルからフェッチされません。
    • ${Stack.items[]}。この構文を使用して、スタック内の特定のアイテムの属性にアクセスします。
    • ${randomNumber}。この構文を使用して、乱数を生成します。たとえば、ランダムなノード名またはスタック名を使用して VM をプロビジョニングできます。
    表 : 1. 定義式の例
    説明
    ${parameter.BillingCode} この式は、詳細計画での請求コードパラメーターの表示方法を示します。
    ${parameter.formData.CatalogAttributeType} この式は、ユーザーがクラウドユーザーポータルでカタログアイテムのフォームに入力している間に、ユーザーが送信するカタログ属性を受け取ります。
    ${parameter.userData.userId} この式は、ユーザーがクラウドユーザーポータルでカタログアイテムのフォームに入力している間に、ユーザーの ID を受け取ります。
    ${Stack.items[Virtual Server].attributes[sys_id]} この式は、スタック以外の仮想サーバーの sys_id を取得します。仮想サーバーは、スタックで使用されるリソースブロックのエイリアスです。

    ランタイム式の構文と例

    許容される構文では、ドル記号と括弧を使用します。次のタイプを使用できます。
    • $(ci.tablename)。ここで tablename はシステム内のテーブルであり、通常は CMDB の CI テーブルです。この構文を使用して、テーブルのフィールドの値にアクセスします。
    • $(Stack.items[])。この構文を使用して、スタック内の特定のアイテムの属性にアクセスします。
    表 : 2. ランタイム式の例
    説明
    $(ci.cmdb_ci_cloud_subnet[ sys_id=12231231231231231231].cidr) この式はクラウドサブネットテーブルへのドット連結を指定し、指定された sys_id を持つ特定のレコードを検索して、cidr 列から値を取得します。
    $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}]) この式は、ランタイムタイプの式と定義タイプの式を組み合わせたものです。等号 = は、値の一致を評価するために使用されます。この式は IP プールテーブルへのドット連結を指定し、ユーザーが送信したサブネット ID を持つサブネットを検索します。
    $(ci.cmdb_ci_cloud_subnet[${parameter.formData.SubnetId}].cidr) この式は、ランタイムタイプの式と定義タイプの式を組み合わせたものです。この式は、ユーザーがプロビジョニング中に選択したサブネットから cidr フィールドの値を取得します。角括弧 [] は、式がクラウドサブネットテーブルへのドット連結を指定し、詳細計画のプロビジョニング時にユーザーが送信したサブネット値を調べることを示します。式は cidr フィールド値を取得し、サブネットの sys_id の cidr フィールドの値に連結されます。
    ${Stack.items[Virtual Server].attributes[sys_id]} 定義式の例のように、この式は、スタック以外の仮想サーバーの sys_id を取得します。

    式の例

    $(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].private_ip)
    • $(ci:テーブルからデータを取得するランタイム式。
    • cmdb_ci_nic:NIC (ネットワークインターフェイスカード) の CI。
    • $(Script:スクリプトベースの式。
    • CMPVMNICs:スクリプトインクルード。
    • getNICs:スクリプトインクルード内の関数。
    • arg:スクリプトインクルード関数の引数。複数の属性がある場合、引数は「,」で区切られます。
    • $(Stack.items:スタックからスタックアイテムを取得するランタイムスタック式。引数は、詳細計画で指定されたエイリアスです。
    • Virtual Server:詳細計画で使用されるリソースのエイリアス。
    • $(Stack.items[Virtual Server].attributes[sys_id]):スタック内のスタックアイテム ("Virtual Server") リソースインスタンスの sys_id を取得します。
    • private_ip:cmdb_ci_nic からの属性。必要に応じてパブリック IP に置き換えます。

    Simple parameter mapping expression

    このタイプの式は、詳細計画操作、リソースブロック、ポリシーなどのプロセスの入力属性から値を取得します。データはテーブルからフェッチされません。詳細計画からリソース、さらにはクラウド API までなど、あるレイヤーから別のレイヤーに値をマップします。

    • タイプ:定義
    • 構文:${parameter.}
    • 例:
      • ${parameter.BillingCode} は、請求コードを返します。
      • ${parameter.formData.CatalogAttributeType} は、クラウドユーザーポータルの要求フォームで送信されるカタログ属性を取得します。
      • ${parameter.userData.userId} は、クラウドユーザーポータルの要求フォームで作業しているユーザーの ID を取得します。

    Stack item expression

    CMDB の CI インスタンスは、各スタックアイテムを表します。スタックアイテム式を使用して、スタックアイテムを支援する CI またはスタックアイテム自体の第 1 レベルのプロパティを検索します。

    • タイプ:定義/ランタイム
    • 構文:${Stack.items[]} または $(Stack.items[])
    • 例:

      ${Stack.items[VirtualServer1].attributes[sys_id]} は、スタック内の仮想サーバーの sys_id を取得する定義タイプの式です。VirtualServer1 は、スタックで使用されるリソースブロックのエイリアスです。

      $(Stack.items[VirtualServer2].attributes[sys_id]) は、スタックの一部である仮想サーバーの sys_id を取得するランタイムタイプの式です。

      ${Stack.items[vm1].attributes[node_id]} は、VM 用に作成された CI の node_id 属性を読み取ります。vm1 はスタックアイテム名 (または詳細計画内のリソースのエイリアス) です。

      $(Stack.items[vm1].status) は、スタックアイテムのステータスを読み取ります。

    Property override expressions in policies

    ポリシーでは、システムから値をプルするか、乱数を使用して、プロパティをオーバーライドできます。クラウドユーザーポータルのフォームと、フォームで操作を実行したユーザーの両方のデータを使用できます。

    • タイプ:定義/ランタイム
    • 構文:${parameter.formData.xyz} または ${this.parameter.userData.xyz}
    • 例:

      次の値はスタック名を Stack_Bob.Smith@company.com に設定できます。Stack_${parameter.userData.userId}

      IP プールテーブルからサブネットを取得してランタイム式を使用することで、スタックまたはテーブルの値を設定します。

      $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}])

      スクリプトでは、次のように値を割り当てることができます。

      formData.App_Server_NodeName = "MyNodeName";

      this.parameter.userData.userId == 'servicenowuserId';

    • ポリシーアクションスクリプトの作成」も参照してください。

    Script expression

    この例では、VMPropertiesgetIP という関数を含むスクリプトインクルードです。スクリプト式は、複合式の例でもあります (式はネストされています)。

    • タイプ:ランタイム
    • 構文:$(Script:scriptName.function[])
    • 例:

      $(Script:VMPropertiesUtil.getIP[ arg=$(Stack.items[VM1].attributes[object_id])])

      プライベート IP の式:$(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].private_ip)

      パブリック IP の式:$(ci.cmdb_ci_nic[$(Script:CMPVMNICs.getNICs[arg=$(Stack.items[Virtual Server].attributes[sys_id])])].public_ip)

      認証情報エイリアスを取得する式:$(Script:CMPVMUtils.getCredentialAlias[arg=${Stack.items[Virtual Server].attributes[sys_id]}])

      IP アドレスを取得する式:$(Script:CMPVMUtils.getReachableIp[arg=$(Stack.items[Virtual Server].attributes[sys_id])])

    CI lookup expression

    テーブル内 (通常は CMDB の CI テーブル) のフィールドの値にアクセスします。

    • タイプ:定義/ランタイム
    • 構文:$(ci.tableName)
    • 例:

      $(ci.sn_cmp _ip_pool[subnet=${parameter.formData.Subnet Id}]) は、ランタイムタイプの式と定義タイプの式を組み合わせたものです。= 演算子は、一致する値を評価します。この式は IP プールテーブルへのドット連結を指定し、ユーザーが送信したサブネット ID を持つサブネットを検索します。

      $(ci.cmdb_ci_cloud_subnet[${parameter.formData.SubnetId}].cidr) は、ユーザーがプロビジョニング中に指定したサブネットの cidr フィールドの値を取得します。この式は、クラウドサブネットテーブルへのドット連結を指定し、ユーザーが詳細計画のプロビジョニングで送信したサブネット値を調べて、cidr フィールド値を取得し、サブネットの sys_id の cidr フィールドの値に連結します。

    Random number expression

    乱数を生成します。たとえば、ランダムなノード名またはスタック名を使用して VM をプロビジョニングできます。

    • タイプ:ランタイム
    • 構文と例:${randomNumber}

    Scratchpad expression/Resource operation output attribute expression

    ある操作から別の操作に出力属性を読み取ります。

    • タイプ:ランタイム
    • 構文:場合による
    • 例:1 つの操作からの出力を設定または公開するには、次を使用します。

      ${Compute Interface.CreateNode.Output.resp.nodeId}

      出力属性を読み取るには、次を使用します (VM1.Provision は、出力属性の読み取り操作です)。

      $(Outputs[VM1.Provision].NodeId)

    Conditions in expressions

    詳細計画のステップおよびリソース操作のステップで条件式を使用して、ステップを条件付きで実行またはスキップできます。条件式は Javascript 式であり、式の置換をサポートします。

    • タイプ:定義/ランタイム
    • 構文:場合による
    • 例:

      ‘${parameter.CloudAccount}’==’Amazon Cloud Account’

      ‘$(Stack.items[vm1].attributes[node_id]) ’== ’VM1’

    Complex expression

    式はネストできます。この例では、${parameter.ServerID} は CI の sys_id をマップし、外側の式が使用される前に置き換えられます。

    • タイプ:任意
    • 構文:場合による
    • 例:$(ci.cmdb_ci_vm_instance[${parameter.ServerID}].name)

    Order context

    この式はライフサイクル操作に役立ち、sn_cmp_order テーブルの一部として順序属性でドット連結できます。

    • タイプ:ランタイム
    • 構文:$(context.order.column_name)
    • 例:
      • 要求アイテム:$(context.order.sc_req_item)
      • 要求アイテムオブジェクトでのドット連結:$(context.order.sc_req_item.number)
      • 混合式 (定数 + 式):"ram$(context.order.sc_req_item.number)"