Citrix Application Delivery Managementサービス

StyleBookの最も強力な機能の1つは、式の使用です。さまざまなシナリオでStyleBookの式を使用して動的な値を計算できます。次の例は、パラメータ値をリテラル文字列と連結する式です。

:

$parameters.appname + "-mon"

この式は、appnameという名前のパラメータを取得し、文字列-monと連結します。

次の種類の式がサポートされています。

算術式

  • 加算 (+)
  • 減算 (-)
  • 乗算 (*)
  • 除算 (/)
  • モジュロ (%)

:

  • 2つの数字の加算:$parameters.a + $parameters.b
  • 2つの数字の乗算:$parameters.a * 10
  • ある数を別の数で除算した後の余りを見つける:

15%10 結果 5

文字列式

  • 2 つの文字列を連結する (+)

:

Concatenate two strings: str(“app-“) + $parameters.appname

式の一覧表示

2つのリスト(+)をマージします

:

  • Concatenate two lists: $parameters.external-servers + $parameters.internal-servers

  • $parameters.ports-1が[80, 81]であり、$parameters.port-2が[81, 82]であるならば、$parameters.ports-1 + $parameters.ports-2がリスト[80, 81, 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()組み込み関数を使用して)文字列に変換される式を型キャストすることができます。同様に、 tcp-portを数字にキャストすることができます(int()組み込み関数を使用して)、IPアドレスは(str()組み込み関数を使用して)文字列にキャストすることができます。

演算子の前と後に区切り文字を使用します。区切り記号は次のように使えます。

  • 演算子の前: spacetabcomma()[]

  • 演算子の後: spacetab([

次に例を示します:

  • abc + def

  • 100 % 10

  • 10 > 9

  • $item in $parameters.some-list

逐語的な文字列式

文字列内の特殊文字がリテラル形式を取る必要がある場合は、逐語的な文字列を使用できます。これらの文字列には、エスケープ文字、バックスラッシュ、引用符、括弧、空白、角かっこなどを含めることができます。逐語文字列では、特殊文字の通常の解釈はスキップされます。文字列内のすべての文字は、リテラル形式で保持されます。

StyleBooksでは、逐語的な文字列を使用して、Citrix 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-->

複数の逐語文字列を連結する

逐語文字列を通常の文字列または補間で連結できます。そうすると、StyleBookは逐語文字列のみの解釈をスキップします。連結する文字列の間には、プラス (+) 演算子を使用します。

例:

value: "~{"id": "}~ + %{$atom.key}% + ~{", "value": "}~ + %{$atom.value}% + ~{"}~"
<!--NeedCopy-->

この例では、%{$atom.key}%%{$atom.value}%が解釈されます。そして、残りの部分については解釈がスキップされます。

ターゲットエクスプレッション

StyleBook 定義では、$current-target式を使用して現在のターゲットの ADC インスタンスを参照できます。ターゲットADCインスタンスの IP アドレスを具体的に参照するには、次の式を使用します。

$current-target.ip
<!--NeedCopy-->

例:

components:
 -
  name: lb-comp
  type: ns::lbvserver
  properties:
    name: $current-target.ip + "-lbvserver"
<!--NeedCopy-->

この例では、lbvserverの名前はターゲット ADC インスタンスの IPアドレスを使用します。

式の種類の検証

StyleBook エンジンでは、コンパイル時により強力な型チェックが可能になりました。つまり、StyleBookの作成時に使用される式は、設定パックの作成時ではなく、StyleBook自体のインポート時に検証されます。

パラメータ、置換、コンポーネント、コンポーネントのプロパティ、コンポーネントの出力、ユーザー定義変数 (repeat-item、repeat-index、置換関数への引数) などへの参照はすべて、その存在と型について検証されます。

タイプチェックの例:

次の例では、lbvserverStyleBookのポートプロパティの予想されるタイプはtcp-portです。Citrix Application Delivery Management(ADM)では、タイプの検証はコンパイル時(インポート時)に行われます。コンパイラは、文字列と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をCitrix ADM にインポートすることができました。これで、このStyleBookがCitrix ADMにインポートされると、コンパイラはこのような無効な式を識別し、フラグを付けます。その結果、StyleBookはCitrix ADMへのインポートに失敗します。

この例では、lb-sg-binding-compコンポーネントの name プロパティに割り当てられる式は $components.lbvserver-comp.properties.lbvservernameです。ただし、コンポーネントlbvserver-compにはlbvservernameと呼ばれるプロパティはありません。以前のCitrix ADM リリースでは、コンパイラはこの式を許可し、正常にインポートされていました。実際の失敗はこのStyleBookを用いて構成パックを作成するときに起こります。ただし、インポート中にこの種のエラーが特定され、StyleBookはCitrix ADM にインポートされません。このようなエラーを手動で修正し、StyleBooks をインポートします。

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-->

インデックスの一覧

一覧のアイテムは直接インデックスすることでアクセスできます。

   
説明
$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コンポーネントの最初の項目からの出力です。