Application Delivery Management

自動置換

Substitutionsセクションは、StyleBookのほかの部分でStyleBookを読み取りやすくするために使用できる、複雑な式の省略名を定義するために使用されます。また、このセクションは、StyleBookで同じ式または値を複数回使用する場合にも役立ちます(定数値など)。この値に置換名を使用すると、この値を変更する必要があるときに、StyleBookに出現するすべての箇所で値を更新するのではなく(この方法ではエラーが発生しやすくなります)、置換値のみを更新できます。

置換は、このドキュメントの後の例で示すように、値のマッピングの定義にも使用できます。

一覧の各置換はキーと値で構成されます。 値には、単純な値、式、関数、またはマップを指定できます。

次の例では、2つの置換が定義されています。1つ目は、8181の省略名として使用できる「http-port」です。置換を使用することで、この値をStyleBookのほかの部分で、8181ではなく$substitutions.http-portとして参照できるようになります。

置換:

  http-port: 8181

これにより、ポート番号のニーモニック名を指定できるほか、その使用回数に関係なく、このポート番号をStyleBook内の1か所で定義できます。ポート番号を8080に変更する場合は、Substitutionsセクションで変更すると、ニーモニック名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
<!--NeedCopy-->

置換は複雑な式にすることもできます。次の例は、2つの置換で式を使用する方法を示しています。

substitutions:
  app-rule: HTTP.REQ.HEADER("X-Test-Application").EXISTS
  app-name: str("acme-") + $parameters.name + str("-app")
<!--NeedCopy-->

また、置換式では、次の例に示すように既存の置換式を使用することもできます。

substitutions:
  http-port: 8181
  app-name: str("acme-") + $parameters.name + str($substitutions.http-port) + str("-app")
<!--NeedCopy-->

置換のもう1つの便利な機能がマップで、キーを値にマップできます。以下は、マップ置換の例です。

substitutions:
    secure-port:
        true: int("443")
        false: int("80")
    secure-protocol:
        true: SSL
        false: HTTP
<!--NeedCopy-->

次の例は、マップ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
<!--NeedCopy-->

つまり、StyleBookのユーザーがパラメーターis-secureにブール値「true」を指定するか、Citrix ADM GUIでこのパラメーターに対応するチェックボックスを選択した場合、このコンポーネントのservicetypeプロパティにはSSLという値が割り当てられ、ポートプロパティには値443が割り当てられます。 ただし、ユーザーがこのパラメーターに「false」を指定するか、Citrix ADM GUIの対応するチェックボックスをオフにすると、 servicetypeプロパティにはHTTPという値が割り当てられ 、ポートには80という値が割り当てられます。

次の例は、置換を関数として使用する方法を示しています。置換関数は1つまたは複数の引数を取ることができます。引数は、string、number、ipaddress、booleanなどの単純な型にする必要があります。

置換:

  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)
<!--NeedCopy-->

置換は、キーと値で構成することもできます。値には、単純な値、式、関数、マップ、一覧、またはディクショナリを指定できます。

以下は、値がリストである ‘slist’ という置換の例です。

substitutions:
  slist:
    - a
    - b
    - c
<!--NeedCopy-->

置換の値には、以下の「sdict」という置換の例に示すように、キーと値のペアのディクショナリも指定できます。

substitutions:
  sdict:
    a: 1
    b: 2
    c: 3
<!--NeedCopy-->

一覧とディクショナリを組み合わせると、もっと複雑な属性を作成できます。たとえば、「slistofdict」という名前の置換はキーと値のペアの一覧を返します。

  slistofdict:
    -
      a: $parameters.cs1.lb1.port
      b: $parameters.cs1.lb2.port
    -
      a: $parameters.cs2.lb1.port
      b: $parameters.cs2.lb2.port
<!--NeedCopy-->

しかし、次の例では、置換「sdictoflist」はキーと値のペアを返します。ここでも値は別の一覧です。

  sdictoflist:
    a:
      - 1
      - 2
    b:
      - 3
      - 4
<!--NeedCopy-->

コンポーネントでは、これらの置換はcondition、properties、repeat、repeat-condition構造で使用できます。

次のコンポーネントの例では、置換を使用してpropertiesを指定する方法を示します。

    properties:
      a: $substitutions.slist
      b: $substitutions.sdict
      c: $substitutions.slistofdict
      d: $substitutions.sdictoflist
<!--NeedCopy-->

値が一覧またはディクショナリの置換を定義するユースケースは、コンテンツスイッチ仮想サーバーや複数の負荷分散仮想サーバーを構成する場合です。同一のcs仮想サーバーに関連付けされたすべてのlb仮想サーバーはまったく同じ構成を持つことができるため、置換一覧およびディクショナリを使用してこの構成を作成し、各lb仮想サーバーでの構成の繰り返しを避けることができます。

次の例では、コンテンツスイッチ仮想サーバー構成を作成するcs-lb-mon StyleBookの置換とコンポーネントを示します。cs-lb-mon StyleBookのプロパティを構成しながら、複雑な置換「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
<!--NeedCopy-->

置換マップ:

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

substitutions:
     port:
          HTTP: 80
          DNS: 53
          SSL: 443
<!--NeedCopy-->

この例では、HTTPは80に、DNSは53に、SSLは443にマップされます。パラメーターとして与えられた特定のプロトコルのポートを取得するには、次の式を使用します。

$substitutions.port [$parameters.protocol]

この式は、ユーザーが指定したプロトコルに基づいて値を返します。

  • キーがHTTPの場合、この式は80を返します。
  • キーがDNSの場合、この式は53を返します。
  • キーがSSLの場合、この式は443を返します。
  • キーがマップ内に存在しない場合、この式はいずれの値も返しません。
自動置換

この記事の概要