Application Delivery Management

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

      $parameters.appname + “-mon”

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

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

算術式

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

:

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

15% 10 件が 5 件見つかりました

文字列式

  • 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, 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:論理積演算子。両方のオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。

  • or:論理和演算子。いずれかのオペランドがtrueの場合、結果はtrueとなり、それ以外の場合はfalseとなります。

  • not:単項演算子。オペランドが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
<!--NeedCopy-->

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

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

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

インデックスの一覧

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

| | | | ——————————————————————————- | ———————————————————————————————————————————————- | | **式** | **説明** | | $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コンポーネントの最初のアイテムからの出力です。 | |