StyleBookの設定

依存関係の検出

StyleBookのコンポーネントでは、同じStyleBookに含まれる別のコンポーネントのプロパティまたはセクションを参照できます。コンポーネントはそれ自体が完全なブロックであり、実行する必要があるのと同じ順序で書き込まれない場合があります。StyleBookコンパイラは、コンポーネントが書き込まれる順序をチェックし、論理的な順序で実行されます。

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: mylb

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

 -
    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: $components.lbvserver-comp.properties.name

      servicegroupname: $components.sg-comp.properties.servicegroupname

-
    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: HTTP
<!--NeedCopy-->

上記の例では、定義された3つのコンポーネントがあります- lbvserver-complb-sg-binding-comp、および sg-comp。この StyleBook を実行すると、 lbvserver-compが最初に作成されます。lb-sg-binding-complbvserver-compプロパティを参照しますが、StyleBookで定義されている2番目のコンポーネントですが、次に作成することはできません。これは、lb-sg-binding-compがまだ作成されていないsg-compにも依存しているためです。その結果、コンパイラーはコンポーネントの順序を変更して、コンポーネントが作成されるまでにコンポーネントの依存関係が解決され、この順序が変更されたコンポーネントのリストを実行します。上記のStyleBookの実行順序は lbvserver-compsg-complb-sg-binding-compです。

したがって、StyleBookの作成者がコンポーネントの正確な順序を気にする必要はありません。コンポーネントはどのような順序で記載しても構いません。コンパイラにより、コンポーネント間の参照関係に基づいて適切なコンポーネントの実行順序が計算されます。これは、置換セクションと出力セクションにも適用されます。

循環依存関係

コンポーネントは別のコンポーネントを参照する場合があるため、依存関係のサイクルが StyleBook の定義に導入される可能性があります。たとえば、コンポーネントAがコンポーネントBで定義されているプロパティを参照しており、さらにコンポーネントBがコンポーネントAで定義されているプロパティを参照している場合などです。こうした依存関係は、循環依存関係と呼ばれます。循環依存関係を自動で解決することはできません。StyleBookの作成者は、StyleBookの定義を手動で修正して、このような循環依存を排除します。コンパイラは循環依存関係を特定することができ、循環依存関係が存在する場合にはレポートします。

以下の例に、コンポーネントの循環依存関係を示します。

components:

  -

    name: lbvserver-comp

    type: ns::lbvserver

    properties:

      name: $components.lb-sg-binding-comp.properties.name

      ipv46: 10.102.190.15

      port: 80

      servicetype: HTTP

  -

    name: lb-sg-binding-comp

    type: ns::lbvserver_servicegroup_binding

    condition: $parameters.create-binding

    properties:

      name: mylb

      servicegroupname: $components.sg-comp.properties.servicegroupname

  -

    name: sg-comp

    type: ns::servicegroup

    properties:

      servicegroupname: mysg

      servicetype: $components.lbvserver-comp.properties.servicetype
<!--NeedCopy-->

上記の例では、lbvserver-complb-sg-binding-comp、およびsg-compの 3 つのコンポーネントがあります。lbvserver-comp コンポーネントは lb-sg-binding-complb-sg-binding コンポーネントに依存します。そして、これらのコンポーネントはsg-compに依存します。sg-compコンポーネントはlbvserver-compに依存します。このように、これらのコンポーネント間で依存関係の循環が生じており、この循環は自動で解決できません。その結果、このStyleBookを実行することはできません。StyleBookコンパイラがこれを検出し、StyleBook がNetScaler Consoleにインポートされないようにします。

依存関係の検出

この記事の概要