Citrix Application Delivery Managementサービス

自動置換

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

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

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

次の例では、2つの置換が定義されています。最初のhttp-portは8181の短縮形として使用できます。置換を使用することで、この値を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
<!--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つまたは複数の引数を取ることができます。引数には、文字列、数値、ipaddress、ブール型、その他の型などの単純な型を使用できます。

置換:

form-lb-name(name): $name + “-lb”

この例では、置換関数「form-lb-name」を定義しています。この関数は「name」 という名前のstring型の引数を取り、それを使用してname引数の文字列の末尾に「-lb」を追加した新しい文字列を作成します。この置換関数を使用する式は、次のように記述することができます。

$substitutions.form-lb-name("my")

my-lbを返します

別の例を考えてみましょう。

置換:

cspol-priority(priority): 10100 - 100 * $priority

cspol-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:

      a: $substitutions.slist

      b: $substitutions.sdict

      c: $substitutions.slistofdict

      d: $substitutions.sdictoflist
<!--NeedCopy-->

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

次の例は、 cs-lb-monStyleBooks の置換とコンポーネントを示して、コンテンツスイッチング仮想サーバー構成を作成します。cs-lb-monStyleBooks のプロパティを構築している間、複合置換の「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を返します。
  • キーがマップ内に存在しない場合、この式はいずれの値も返しません。
自動置換