式
StyleBookの最も強力な機能の1つは、式の使用です。さまざまなシナリオでStyleBookの式を使用して動的な値を計算できます。次の例は、パラメータ値をリテラル文字列と連結する式です。
例:
$parameters.appname + "-mon"
この式は、appname
という名前のパラメータを取得し、文字列-mon
と連結します。
注:
StyleBookでは、StyleBook定義でパラメーターや式を定義する際に、予約済みキーワードの使用をサポートしています。予約キーワードは、
and
、false
、in
、not
、true
およびor
です。
次の種類の式がサポートされています:
算術式
- 加算 (+)
- 減算 (-)
- 乗算 (*)
- 除算 (/)
- モジュロ (%)
例:
- 2つの数字の加算:$parameters.a + $parameters.b
- 2つの数字の乗算:$parameters.a * 10
- ある数を別の数で除算した後の余りを見つける:
5
での結果15%10
文字列式
- 2 つの文字列を連結する (+)
例:
2 つの文字列を連結してください:str (「app-」) + $parameters.appname
式の一覧表示
2つのリスト(+)をマージします
例:
-
2つの一覧を連結:$parameters.external-servers + $parameters.internal-servers
-
$parameters.ports-1
が [80, 81] で、$parameters.port-2
が [81, 82] の場合、$parameters.ports-1 + $parameters.ports-2
はリスト [80、81、82] として表示されます。
関係式
-
== : 2つのオペランドが等しいかどうかをテストし、それらが等しい場合はtrueを返し、それ以外の場合はfalseを返します。
-
! =: 2 つのオペランドが異なるかどうかをテストし、異なる場合は true を返し、それ以外の場合は false を返します。
-
> : 最初のオペランドが2番目のオペランドより大きい場合はtrueを返し、それ以外の場合はfalseを返します。
-
>= : 最初のオペランドが2番目のオペランド以上の場合はtrueを返し、それ以外の場合はfalseを返します。
-
< : 最初のオペランドが2番目のオペランドより小さい場合はtrueを返し、それ以外の場合はfalseを返します。
-
<= : 最初のオペランドが2番目のオペランド以下の場合は true を返し、それ以外の場合は false を返します。
例:
- 等価演算子の使用:
$parameters.name = = "abcd"
- 不等式演算子の使用:
$parameters.name != "default"
-
他の関係演算子の例
10 > 9
10 >= 10
0 < 9
10 <= 9
10 == 10
10 != 1
論理式-ブール値
-
and: 論理「and」演算子。両方のオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。
-
or: 論理 ‘or’ 演算子。いずれかのオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。
-
NOT: 単項演算子。オペランドが真の場合、結果は偽になり、逆になります。
-
in: 最初の引数が2番目の引数の部分文字列かどうかをテストします
-
in: 項目がリストの一部であるかどうかをテストします
注
文字列は(int()組み込み関数を使用して)数字に変換され、数字は(str()組み込み関数を使用して)文字列に変換される式を型キャストすることができます。同様に、(
int()
組み込み関数を使用して) 数値にtcp-port
をキャストしたり、IP アドレスを文字列にキャストしたりできます (str () 組み込み関数を使用)。演算子の前と後に区切り文字を使用します。区切り記号は次のように使えます。
演算子の前:
space
、tab
、comma
、(
、)
、[
、]
演算子のあと:
space
、tab
、(
、[
例:
abc + def
100 % 10
10 > 9
$item in $parameters.some-list
スプラット表現
スプラット式[*]
を使用すると、すべての反復の複雑なリストから特定の属性をより簡単に取得できます。StyleBookの定義にスプラット式を含めることができるようになりました。
構文:
list[*].attribute
<!--NeedCopy-->
このエクスプレッションは、左に指定されたリストのすべての項目を反復処理し、右に指定された属性値を返します。
リストから各仮想サーバーのIPアドレスまたはホスト名を取得する場合は、次のスプラット式を使用できます:
例 1:
$parameters.server-members[*].hostname
<!--NeedCopy-->
この式は、すべてのサーバーメンバーからのホスト名のリストを返します。
例 2:
$parameters.server-members[*].sub-domains[*].name
<!--NeedCopy-->
この式は、各サーバーメンバーのサブドメインにあるすべての名前のリストを返します。
これらの式は常に右端の要素タイプのリストを返します。
逐語的な文字列式
文字列内の特殊文字がリテラル形式を取る必要がある場合は、逐語的な文字列を使用できます。これらの文字列には、エスケープ文字、バックスラッシュ、引用符、括弧、空白、角かっこなどを含めることができます。逐語文字列では、特殊文字の通常の解釈はスキップされます。文字列内のすべての文字は、リテラル形式で保持されます。
StyleBooksでは、逐語的な文字列を使用して、NetScaler ADCポリシー式をリテラル形式で含めることができます。通常、ポリシー式には特殊文字が含まれています。逐語的な文字列を使用しない場合、文字列を部分文字列に分割して特殊文字をエスケープする必要があります。
逐語的な文字列を作成するには、次のように特殊文字間の文字列をカプセル化します:
~{string}~
<!--NeedCopy-->
StyleBook 式では、逐語的な文字列を使用できます。
注:
このシーケンスは逐語的な文字列の終わりを示すため、入力文字列には一連の文字
}~
を使用しないでください。
例:
~{HTTP.REQ.COOKIE.VALUE("jsessionid") ALT HTTP.REQ.URL.BEFORE_STR("=").AFTER_STR(";jsessionid=") ALT HTTP.REQ.URL.AFTER_STR(";jsessionid=")}~
<!--NeedCopy-->
詳しくは、「 StyleBooksで特殊文字をそのリテラル形式で使用できるようにする」を参照してください。
ターゲットエクスプレッション
StyleBook定義では、 式を使用して現在の$current-target
ターゲットNetScalerインスタンスを参照できます。ターゲットのNetScalerインスタンスのIPアドレスを具体的に参照するには、この式を次のように使用します:
$current-target.ip
<!--NeedCopy-->
例:
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $current-target.ip + "-lbvserver"
<!--NeedCopy-->
この例では、 の名前はターゲットのlbvserver
NetScalerインスタンスのIPアドレスを使用します。
式の種類の検証
StyleBook エンジンでは、コンパイル時により強力な型チェックが可能になりました。つまり、StyleBookの作成時に使用される式は、構成パックの作成時ではなく、StyleBook自体のインポート時に検証されます。
パラメータ、置換、コンポーネント、コンポーネントのプロパティ、コンポーネントの出力、ユーザー定義変数 (repeat-item、repeat-index、置換関数への引数) などへの参照はすべて、その存在と型について検証されます。
タイプチェックの例:
次の例では、 lbvserver
StyleBookに期待されるポートプロパティのタイプはtcp-port
です 。NetScaler Consoleでは、型検証はコンパイル時 (インポート時) に行われます。コンパイラーはその文字列を検出し、tcp-port
は互換性のない型であるため、StyleBookコンパイラーはエラーを表示し、StyleBookのインポートまたは移行に失敗します。
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: str("80")
servicetype: HTTP
<!--NeedCopy-->
この StyleBook を正常にコンパイルするには、コンパイラで以下を数値として宣言します:
port: 80
無効な式のフラグ付けの例:
StyleBookをNetScaler Consoleにインポートすると、コンパイラーは無効な式を識別してフラグを立てます。その結果、StyleBook をNetScalerコンソールにインポートできません。
次の例では、 lb-sg-binding-comp
コンポーネントの name プロパティに割り当てられる式は次のようになります $components.lbvserver-comp.properties.lbvservername
。ただし、コンポーネントlbvserver-comp
にはlbvservername
と呼ばれるプロパティはありません。
Components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: mylb
ipv46: 10.102.190.15
port: 80
servicetype: HTTP
-
name: sg-comp
type: ns::servicegroup
properties:
servicegroupname: mysg
servicetype: HTTP
-
name: lb-sg-binding-comp
type: ns::lbvserver_servicegroup_binding
condition: $parameters.create-binding
properties:
name: $components.lbvserver-comp.properties.lbvservername
servicegroupname: $components.sg-comp.properties.servicegroupname
<!--NeedCopy-->
データ型の暗黙的な型キャスト
StyleBook 式をさまざまなデータ型に使用すると、StyleBook エンジンが出力を適切なデータ型に暗黙的に型キャストするようになりました。データ型の暗黙的な型キャストは、二項演算と値の代入をサポートします。
二項演算の例:
- 型
string
とnumber
の 2 つの変数 (+) を加算すると 、 出力データ型がstring
に設定されます。
$parameters.appname + '_' + $parameters.app_instance_num
- 型
string
とipaddress
の 2 つの変数 (+) を加算すると 、 出力データ型がstring
に設定されます。
$parameters.appname + '_' + $parameters.instance_ip
- 型
ipaddress
とnumber
の 2 つの変数 (+) を加算すると 、 出力データ型がipaddress
に設定されます。
$parameters.instance_ip + $parameters.number
- 型
ipaddress
とnumber
の 2 つの変数を減算 (-) すると 、 出力データ型がipaddress
に設定されます。
$parameters.instance_ip - $parameters.number
- 型
string
とnumber
の 2 つの変数を乗算 (*) すると 、 出力データ型がstring
に設定されます。
$parameters.dummy_str * $parameters.count
値割り当ての例:
- 変数が
string
データ型として定義されている場合、割り当てられた値は定義されたデータ型に変換されます。
name: $parameters.port * 3
- 変数が
portnumber
データ型として定義されている場合、 割り当てられた値は例外を除いてportnumber
データ型に変換されます。
port: $index + $parameters.lower_limit
インデックスの一覧
一覧のアイテムは直接インデックスすることでアクセスできます:
式 | 説明 |
$components.test-lbs[0] |
thetest-lbs コンポーネントの最初の項目を参照します |
$components.test-lbs[0].properties.p1 |
test-lbs コンポーネントの最初のアイテムのプロパティ p1 を参照します |
$components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname |
servicegroups コンポーネントの2番目の項目のプロパティservicegroupname を参照します。これは、lbcomps コンポーネントの最初の項目からの出力です |
スタイルブックのポリシー表現
StyleBooks GUIでは、リストから項目を選択してNetScalerのポリシー式を作成できるため、式をより迅速かつ正確に作成できます。
StyleBooksのポリシー式を使用すると、柔軟でカスタマイズ可能な構成を作成できます。さまざまなパラメーター、属性、または変数に基づいて条件を指定できます。ポリシー式は、NetScalerのポリシー構成を実装するためによく使用されます。
StyleBooks GUIでポリシー式エディターを有効にする
EPA または式エディタをパラメータで使用できるようにするには、パラメータ定義に is_policy_expression
GUI 属性を指定します。この設定を有効にすると (true に設定すると)、 このパラメータの値を入力したときにエクスプレッションエディタを起動できます 。
parameters:
-
name: expression
type: string
label: Expression
required: true
gui:
is_policy_expression: true
<!--NeedCopy-->
ポリシー表現の作成と作成
-
「 アプリケーション」>「構成」>「スタイルブック」に移動します。 StyleBookページには 、NetScalerコンソールで利用できるすべてのStyleBook が表示されます。
-
パラメーターにポリシー式を含むStyleBookを選択してください。
-
[ 構成を作成] をクリックします。「 構成の作成 」ページで、このStyleBookで定義されているすべてのパラメーターの値を入力します。
-
「 エクスプレッション 」フィールドの横にあるアイコンをクリックします。 [式の作成 ] ページが表示されます。
-
「 式の作成」で、直感的なドロップダウンを使用してポリシー式を作成します。[Submit] をクリックします。
カスタムポリシー式を作成する場合は、 EPAエディターまたは式エディターをクリックして式を作成します** 。「 **エクスプレッションをプレビュー」でエクスプレッションを確認して 、「 送信」をクリックします。
-
構成を展開するターゲットのNetScalerインスタンスを選択し、「送信」 をクリックします。