置換

最終公開日 : Oct 02, 2026
置換は、StyleBook内の複雑な式を置き換えることができる短縮名を定義するために使用され、StyleBookをより読みやすくします。
置換は、StyleBook内で同じ式や値が繰り返し使用される場合(例えば定数値など)にも役立ちます。パラメータに置換名を使用すると、StyleBook内のパラメータのすべての出現箇所を更新する代わりに、置換値のみを更新できます。これはエラーの原因となる可能性があります。
置換は、このドキュメントの後の例で説明されているように、値間のマッピングを定義するためにも使用されます。
リスト内の各置換は、キーと値で構成されます。値は、単純な値、式、関数、またはマップにすることができます。
次の例では、2つの置換が定義されています。最初のものは、8181の短縮形として使用できる http-port です。置換を使用することで、StyleBookの残りの部分で、8181の代わりに $substitutions.http-port としてこれを参照できます。
置換:
http-port: 8181
これにより、ポート番号に覚えやすい名前を指定し、使用回数に関係なくStyleBookの1箇所でこのポート番号を定義できます。ポート番号を8080に変更したい場合は、置換セクションで変更でき、覚えやすい名前 http-port が使用されているすべての場所で変更が有効になります。次の例は、コンポーネントで置換がどのように使用されるかを示しています。
components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: HTTP

          ipv46: $parameters.ip

          port: $substitutions.http-port

          lbmethod: $parameters.lb-alg
置換は複雑な式にすることもできます。次の例は、2つの置換が式をどのように使用するかを示しています。
substitutions:

  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS

  app-name: str("acme-") + $parameters.name + str("-app")
置換式は、次の例に示すように、既存の置換式を使用することもできます。
substitutions:

  http-port: 8181

  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")
置換のもう1つの便利な機能はマップで、キーを値にマッピングできます。次はマップ置換の例です。
substitutions:

    secure-port:

        true: int("443")

        false: int("80")

    secure-protocol:

        true: SSL

        false: HTTP
次の例は、マップ secure-port と secure-protocol を使用する方法を示しています。
components:

 -

     name: my-lbvserver-comp

     type: ns::lbvserver

     properties:

          name: $parameters.name + "-lb"

          servicetype: $substitutions.secure-protocol[$parameters.is-secure]

          ipv46: $parameters.ip

          port: $substitutions.secure-port[$parameters.is-secure]

          lbmethod: $parameters.lb-alg
ここで、StyleBookのユーザーがパラメータ is-secure にブール値「true」を指定した場合、またはNetScaler Console GUIでこのパラメータに対応するチェックボックスを選択した場合、このコンポーネントの servicetype プロパティには SSL の値が割り当てられ、ポートプロパティには 443 の値が割り当てられます。しかし、ユーザーがこのパラメータに「false」を指定した場合、またはNetScaler Console GUIで対応するチェックボックスをクリアした場合、servicetype プロパティには HTTP の値が割り当てられ、ポートには 80 の値が割り当てられます。
次の例は、置換を関数として使用する方法を示しています。置換関数は1つ以上の引数を受け取ることができます。引数は、例えば文字列、数値、ipaddress、ブール値、その他の型などの単純な型にすることができます。
置換:
form-lb-name(name): $name の値に文字列 "-lb" を連結したもの
この例では、「name」という文字列引数を受け取り、その引数の文字列に「-lb」を接尾辞として追加する文字列を作成する置換関数「form-lb-name」を定義しています。この置換関数を使用する式は次のように記述できます。
$substitutions.form-lb-name("my")
my-lbを返します。
別の例を考えてみましょう。
置換:
cspol-priority(priority): 10100 - 100 * $priority
置換 cspol-priority は、priority という引数を受け取り、それを使用して値を計算する関数です。StyleBook の残りの部分では、この置換は次の例に示すように使用できます。
components:

  -

    name: cspolicy-binding-comp

    type: ns::csvserver_cspolicy_binding

    condition: not $parameters.is-default

    properties:

         name: $parameters.csvserver-name

         policyname: $components.cspolicy-comp.properties.policyname

         priority: $substitutions.cspol-priority($parameters.pool.priority)
次に示すのは、値がリストである slist という置換の例です。
substitutions:

  slist:

    - a

    - b

    - c
置換の値は、以下の sdict という置換の例に見られるように、キーと値のペアの辞書にすることもできます。
substitutions:

  sdict:

    a: 1

    b: 2

    c: 3
リストと辞書を組み合わせることで、より複雑な属性を作成できます。たとえば、slistofdict という置換は、キーと値のペアのリストを返します。
  slistofdict:

    -

      a: $parameters.cs1.lb1.port

      b: $parameters.cs1.lb2.port

    -

      a: $parameters.cs2.lb1.port

      b: $parameters.cs2.lb2.port
しかし、次の例では、置換 sdictoflist はキーと値のペアを返しますが、その値自体が別のリストです。
  sdictoflist:

    a:

      - 1

      - 2

    b:

      - 3

      - 4
コンポーネントでは、これらの置換は condition、properties、repeat、repeat-condition の各構成で使用できます。
コンポーネントの次の例は、置換を使用してプロパティを指定する方法を示しています。
    properties:

      a: $substitutions.slist

      b: $substitutions.sdict

      c: $substitutions.slistofdict

      d: $substitutions.sdictoflist
リストまたは辞書を値とする置換を定義するユースケースは、コンテンツスイッチング仮想サーバーと複数のロードバランシング仮想サーバーを構成する場合です。同じCS仮想サーバーに紐付けられたすべてのLB仮想サーバーが同一の構成を持つ可能性があるため、置換リストと辞書を使用してこの構成を構築し、各LB仮想サーバーでその構成を繰り返すことを避けることができます。
次の例は、コンテンツスイッチング仮想サーバー構成を作成するためのcs-lb-mon StyleBooksにおける置換とコンポーネントを示しています。cs-lb-mon StyleBooksのプロパティを構築する際、複雑な置換「lb-properties」は、CS仮想サーバーに関連付けられたLB仮想サーバーのプロパティを指定します。「lb-properties」置換は、名前、サービスタイプ、仮想IPアドレス、ポート、サーバーをパラメータとして受け取り、キーと値のペアを値として生成する関数です。cs-pools コンポーネントでは、この置換の値を各プールのlb-poolパラメータに割り当てます。
substitutions:

  cs-port[]:

    true: int("80")

    false: int("443")

  lb-properties(name, servicetype, vip, port, servers):

    lb-appname: $name

    lb-service-type: $servicetype

    lb-virtual-ip: $vip

    lb-virtual-port: $port

    svc-servers: $servers

    svc-service-type: $servicetype

    monitors:

      -

        monitorname: $name

        type: PING

        interval: $parameters.monitor-interval

        interval_units: SEC

        retries: 3

components:

  -

    name: cs-pools

    type: stlb::cs-lb-mon

    description: | Updates the cs-lb-mon configuration with the different pools provided. Each pool with rule result in a dummy LB vserver, cs action, cs policy, and csvserver_cspolicy_binding configuration.

    condition: $parameters.server-pools

    repeat: $parameters.server-pools

    repeat-item: pool

    repeat-condition: $pool.rule

    repeat-index: ndx

    properties:

      appname: $parameters.appname + "-cs"

      cs-virtual-ip: $parameters.vip

      cs-virtual-port: $substitutions.cs-port($parameters.protocol == "HTTP")

      cs-service-type: $parameters.protocol

      pools:

        -

          lb-pool: $substitutions.lb-properties($pool.pool-name, "HTTP", "0.0.0.0", 0, $pool.servers)

          rule: $pool.rule

          priority: $ndx + 1

置換マップ

キーを値にマッピングする置換を作成できます。たとえば、各プロトコル(キー)に使用するデフォルトポート(値)を定義したいシナリオを考えてみましょう。このタスクには、次のように置換マップを記述します。
substitutions:

     port:

          HTTP: 80

          DNS: 53

          SSL: 443
この例では、HTTPは80に、DNSは53に、SSLは443にマッピングされています。パラメータとして与えられた特定のプロトコルのポートを取得するには、次の式を使用します。
$substitutions.port
この式は、ユーザーが指定したプロトコルに基づいて値を返します。
  • キーがHTTPの場合、式は80を返します
  • キーがDNSの場合、式は53を返します
  • キーがSSLの場合、式は443を返します
  • キーがマップに存在しない場合、式は値を返しません

置換リストを反復処理する

次の例では、StyleBookはappsという置換リストを反復処理して、一連のlbvserverコンポーネントと、それに対応するサービスグループおよびバインドされたサーバーを作成します。
substitutions:
  apps:
    -
      name: lb1
      vip: 1.2.3.4
      vport: 80
      protocol: HTTP
      servers:
        -
          ip: 10.8.11.11
          port: 8080
        -
          ip: 10.8.11.12
          port: 8080
    -
      name: lb2
      vip: 1.2.3.5
      vport: 81
      protocol: HTTP
      servers:
        -
          ip: 10.9.11.28
          port: 8080
        -
          ip: 10.9.11.29
          port: 8181
components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    repeat: $substitutions.apps
    repeat-item: app
    properties:
      name: $app["name"]
      ipv46: $app["vip"]
      port: $app["vport"]
      servicetype: $app["protocol"]
    components:
      -
        name: servicegroup-comp
        type: ns::servicegroup
        properties:
          servicegroupname: $parent.properties.name + "-svg"
          servicetype: HTTP
        components:
          -
            name: servers-comp
            type: ns::server
            repeat: $app["servers"]
            repeat-item: server
            properties:
              name: $server["ip"]
              ipaddress: $server["ip"]
            components:
              -
                name: servicegroup-servicegroupmember-binding-comp
                type: ns::servicegroup_servicegroupmember_binding
                properties:
                  servicegroupname: $parent.parent.properties.servicegroupname
                  servername: $parent.properties.name
                  port: $server["port"]