インプレイス補間
StyleBook 式を使用して文字列の一部を置き換えることができるようになりました。これらの文字列式が StyleBook コンパイラによって評価されると、StyleBook 式を使用する文字列の一部が式の値に置き換えられます。文字列に StyleBook 式を含めるには、次の表記法を使用します。
"...%{...}%..."
<!--NeedCopy-->
「% {」と「}%」で囲まれた文字は、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 + "\\")")
<!--NeedCopy-->
$parameter.url-object
に「csv」 が割り当てられている場合、上記の式は”HTTP.REQ.URL.CONTAINS (\“csv\”)”と評価されます。しかし、こうした式は読みにくいものです。インプレース補間を使用することで、こうしたパラメーター化を読みやすくわかりやすいものにすることができます。
インプレース補間を使用した式は次のようになります。
str("HTTP.REQ.URL.CONTAINS(%{quotewrap($parameters.url-object)}%)")
<!--NeedCopy-->
上記の式では、インプレース補間を使用して$parameters.url-objectの値の前後に内部引用を追加しています。この式の結果は上記と同じですが、より直感的で実際の結果に近いように見えます。
補間式内で使用できる型
補間の内部で値を生成する式を使用できます:ブール、数値、 tcp-port
、ipaddress
、および文字列。生成された値は、補間式が結果に置き換えられるときに自動で文字列へ変換されます。
文字列式には補間を含めないことも、1個以上の補間を含めることもできます。順次補間で、文字列式の各部分を異なるStyleBook式に置き換えることができます。たとえば、文字列lb-%{$parameters.appname}%-%{$parameters.vip}%では、$parameters.appnameが「app1」、$parameters.vipが「1.1.1.1」の場合、lb-app1-1.1.1.1が返されます。
文字列式は、ネストされた補間もサポートします。つまり、補間式を別の補間式の内側に入れ子にして、ある式の値を別の式の入力にすることができます。
たとえば、文字列「% {lb-% {$パラメータ.port + 1}%」を考えてみましょう。
内部文字列 “%{$パラメータ.port + 1}%”は、$パラメータ.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-%{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)}%") |
\"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}%
|