インプレース補間
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 + 1}%」は、$parameters.portが80の場合、「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(https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL") |
"あいうえお"<https://"+HTTP.REQ.HOST NAME+HTTP.REQ.URL |
補間におけるエスケープ文字
「%{" または "}%" の文字が文字列の一部である場合、StyleBookコンパイラがこれらを補間タグとして評価しないように、エスケープ文字として「
\」を指定する必要があります。
例:
str("%{\%\{ + str($parameters.vip) + \}\%}%") は、$parameters.vip が 1.1.1.1 の場合、"%{1.1.1.1}%" を返します。
次の表は、いくつかの式とその結果を示しています。
| カテゴリ | 式 | 結果 |
|---|---|---|
| 補間のエスケープ | str("%{str($parameters.n1) + }\%}%") | 1}% |
| lb-%{str($parameters.n1) + }\%}% | lb-1}% | |
| "%{str($parameters.n1) + \"\}\%\"}%" | 1}% |