インプレイス補間
文字列の一部を、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\”)」となります。
ここで、StyleBookに文字列パラメーター(この例では$parameters.url-object)を追加して、HTTP URLのオブジェクトをパラメーター化できます。ポリシー式は、このパラメーターに基づいて記述する必要があります。この目的を達成するには、文字列連結を使用します。式は次のようになります。
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の各型の値が生成される式を使用できます。生成された値は、補間式が結果に置き換えられるときに自動で文字列へ変換されます。
文字列式には補間を含めないことも、1個以上の補間を含めることもできます。順次補間で、文字列式の各部分を異なるStyleBook式に置き換えることができます。たとえば、文字列lb-%{$parameters.appname}%-%{$parameters.vip}%では、$parameters.appnameが「app1」、$parameters.vipが「1.1.1.1」の場合、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-%{true}% | lb-True |
順次補間
式 | 結果 |
---|---|
% {$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)}%”)
str(“%{quotewrap( https://)}%+HTTP.REQ.HOSTNAME+HTTP.REQ.URL")
|
“abcd
“«code class=”language-plaintext highlighter-rouge”>https://”+HTTP.REQ.HOST NAME+HTTP.REQ.URL</code> |
補間式のエスケープ文字列
文字「% {」または「}%」が文字列の一部である場合、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}% | |