Citrix Application Delivery Management 13.0

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

  • If $parameters.ports-1 is [80, 81] and $parameters.port-2 is [81, 82], then $parameters.ports-1 + $parameters.ports-2 results as a list [80, 81, 81, 82]

関係式

  • ==:2つのオペランドが等しいかどうかをテストして、等しい場合はtrueを、異なる場合はfalseを返します。

  • !=:2つのオペランドが異なるかどうかをテストして、異なる場合はtrueを、等しい場合はfalseを返します。

  • : 最初のオペランドが2番目のオペランドより大きい場合はtrueを返し、それ以外の場合はfalseを返します。

  • =:1つ目のオペランドが2つ目のオペランド以上である場合はtrueを、それ以外の場合はfalseを返します。

  • <:1つ目のオペランドが2つ目のオペランドよりも小さい場合はtrueを、それ以外の場合はfalseを返します。

  • <=:1つ目のオペランドが2つ目のオペランド以下である場合はtrueを、それ以外の場合はfalseを返します。

:

  • 等価演算子の使用:$parameters.name = = “abcd”
  • 不等価演算子の使用:$parameters.name != “default”
  • 他の関係演算子の例
    • 10 > 9
    • 10 >= 10
    • 0 < 9
    • 10 <= 9
    • 10 == 10
    • 10 != 1

論理 (ブール) 式

  • and: The logical ‘and’ operator. 両方のオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。

  • or: The logical ‘or’ operator. いずれかのオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。

  • not: The unary operator. オペランドがtrueの場合、結果はfalseとなり、オペランドがfalseの場合、結果はtrueとなります。

  • in:最初の引数が2番目の引数の部分文字列であるかどうかをテストします

  • in:項目がリストの一部であるかどうかをテストする

文字列が数値に変換でき、数値が文字列に変換できる場合は、キャスト式を入力できます。同様に、TCPポートを数値に型変換でき、IPアドレスを文字列に型変換できます。

演算子の前後には区切り記号を使う必要があります。区切り記号は次のように使えます。

  • 演算子の前:スペース、タブ、カンマ、(、 )、[、 ]

  • 演算子の後:スペース、タブ、(、[

  • 次に例を示します:

  • abc + def

  • 100 % 10

  • 10 > 9

式の種類の検証

StyleBookエンジンはコンパイル時により強力な種類のチェックができるようになりました。つまり、StyleBookを書くときに使われる式は、構成パックの作成時ではなくて、StyleBook自身のインポート時に検証されます。

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

タイプチェックの例:

以下の例では、lbvserverのStyleBookのポートプロパティの予期される種類はtcp-portです。Citrix Application Delivery Management(ADM)以前のリリースでは、StyleBookコンパイラが値を文字列として計算し、StyleBookをインポートして実行しました。今では、コンパイル時に種類の検証が行われます(インポート時)。コンパイラは文字列とtcp-portが互換性のない種類であることを発見し、StyleBookコンパイラはエラーを返し、StyleBookのインポートまたは移行に失敗します。


components:
  -
    name: lbvserver-comp
    type: ns::lbvserver
    properties:
      name: mylb
      ipv46: 10.102.190.15
      port: str("80")
      servicetype: HTTP

You should now declare this as a number for the compiler to successfully compile this StyleBook.

  port: 80

無効な式のフラグ付けの例:

以前のリリースでは、無効な式がプロパティ名に割り当てられている場合、コンパイラは無効な式を検出せず、StyleBookをCitrix ADM にインポートすることができました。このStyleBookをCitrix ADM にインポートすると、コンパイラはそのような無効な式を識別してフラグを立てます。その結果、スタイルブックはCitrix ADM にインポートされません。

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


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

インデックスの一覧

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

| | | | ——————————————————————————- | ———————————————————————————————————————————————- | | | 説明 | | $components.test-lbs[0] | test-lbsコンポーネントの最初のアイテムを参照します。 | | $components.test-lbs[0].properties.p1 | test-lbsコンポーネントの最初のアイテムのプロパティp1を参照します。 | | $components.lbcomps[0].outputs.servicegroups[1].properties.servicegroupname | servicegroupsコンポーネントの2番目のアイテムのプロパティservicegroupnameを参照しますが、これはlbcompsコンポーネントの最初のアイテムからの出力です。 | |