インプレース補間
StyleBook式を使用して文字列の一部を置換できるようになりました。これらの文字列式がStyleBookコンパイラによって評価されると、StyleBook式を使用している文字列の部分は、その式の値に置換されます。文字列にStyleBook式を含めるには、次の表記法を使用します。
"...%{...}%..."
「%{」と「}%」で囲まれた文字がStyleBook式を形成します。これらの式は「インプレース補間」として知られています。
例えば、文字列
lb-%{$parameters.appname}%-svc は、StyleBook式のインプレース補間を含む文字列式です。文字列式の値は、補間式の値に依存します。$parameters.appname に「app1」が割り当てられているとします。すると、文字列式は lb-app1-svc と評価されます。これにより、値が文字列式にハードコードされるのではなく、ユーザー定義の値に基づいて評価されるようになります。
インプレース補間の実用的なユースケースは、StyleBookでポリシー式をパラメータ化することです。HTTP URLに特定の単語、例えば「jpeg」が含まれているかどうかをチェックするポリシー式を作成したいシナリオを考えてみましょう。
このためには、次のようにポリシー式を記述します: 「HTTP.REQ.URL.CONTAINS(\\"jpeg\\")」。
ここで、HTTP URL内のオブジェクトをパラメータ化したい場合、StyleBookに文字列パラメータ、例えば
$parameters.url-object を追加できます。ポリシー式はこのパラメータに基づいて記述されます。そのためには、文字列連結を使用して結果を実現します。式は次のようになります。
str("HTTP.REQ.URL.CONTAINS(\\"" + $parameters.url-object + "\\")")
$parameter.url-object に「csv」が割り当てられている場合、上記の式は「HTTP.REQ.URL.CONTAINS(\\"csv\\")」と評価されます。しかし、この式は読みにくいです。このパラメータ化を読みやすく理解しやすくするために、インプレース補間を使用できます。
インプレース補間を使用した式は次のとおりです。
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
上記の式では、$parameters.url-object の値の周りに内部引用符を追加する補間式を使用しました。この式の結果は上記と同じですが、より直感的で実際の結果に近いものに見えます。
補間内で許可される型
補間内では、boolean、number、
tcp-port、ipaddress、string のいずれかの型の値を生成する式を使用できます。補間が結果に置き換えられると、生成された値は自動的に文字列に変換されます。
文字列式には、0個、1個、またはそれ以上の補間を含めることができます。シーケンシャル補間では、文字列式の異なる部分を異なるStyleBook式で置換できます。例えば、$parameters.appname が「app1」で、$parameters.vip が「1.1.1.1」の場合、文字列 lb-%{$parameters.appname}%-%{$parameters.vip}% は「lb-app1-1.1.1.1」を返します。
文字列式はネストされた補間もサポートしています。つまり、ある補間式を別の補間式の中にネストして、一方の式の値がもう一方の式の入力となるようにすることができます。
例えば、文字列「%{lb-%{$parameters.port + 1}%}%」を考えてみましょう。
$parameters.port が 80 の場合、内部文字列「%{$parameters.port + 1}%」は「lb-81」を返します。ここでは、この式は別の補間式の中にネストされています。
以下の表は、補間のさまざまなタイプを例と対応する結果とともに説明しています。例で使用されているパラメータの値は次のとおりです。
-
$parameters.appname: "lb1"
-
$parameters.vip: "1.1.1.1"
-
$parameters.n1: 1
-
$parameters.n2: 3
単純な補間
| 式 | 結果 |
|---|---|
lb-%{$parameters.appname}%-def |
lb-lb1-def |
自動型変換
| 式 | 結果 |
|---|---|
| lb-%{1}% | lb-1 |
| lb-%{$parameters.vip}% | lb-1.1.1.1 |
| lb-%{トゥルー}% | lb-トゥルー |
シーケンシャル補間
| 式 | 結果 |
|---|---|
| %{$parameters.appname}%-%{str($parameters.appname)}% | lb1-lb1 |
| lb-%{1}%-%{2}% | lb-1-2 |
ネストされた補間
| 式 | 結果 |
|---|---|
%{abc-%{$parameters.n1 + 1}%}% |
abc-2 |
str("%{abc-%{$parameters.n1}%}%-%{$parameters.n2}%") |
bc-1-3 |
quotewrap を使用した補間
| 式 | 結果 |
|---|---|
str("%{quotewrap(abcd)}%") |
\"abcd |
str("%{quotewrap(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL") |
<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL |
補間におけるエスケープ文字
文字列の一部として「% {」または「}%」の文字がある場合、StyleBookコンパイラがこれらを補間タグとして評価しないように、エスケープ文字として「
\」を指定する必要があります。
例:
str("%{\%\{ + str($parameters.vip) + \}\%}%") returns "%{1.1.1.1}%" if $parameters.vip is 1.1.1.1
次の表に、いくつかの式とその結果を示します。
| カテゴリ | 式 | 結果 |
|---|---|---|
| 補間のエスケープ | str("%{str($parameters.n1) + \}\%}%") |
1}% |
lb-%{str($parameters.n1) + \}\%}% |
lb-1}% |
|
"%{str($parameters.n1) + \\"\\}\\%\\"}%"\|1}% |