置換は、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、ブール値などの単純な型にすることができます。
置換:
ロードバランサー名の生成 (name): $name + "-lb"
この例では、"name"という文字列引数を受け取り、その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