Application Delivery Management

依存関係の検出

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-compはlbvserver-compプロパティを参照しており、StyleBookで2番目に定義されているコンポーネントですが、この次に作成することはできません。これは、lb-sg-binding-compにはまだ作成されていないsg-compとの依存関係もあるからです。このため、コンパイラはコンポーネントの作成時点でコンポーネントの依存関係が解決されるようにコンポーネントを並べ替え、並べ替えた順序でコンポーネントを実行します。上記のStyleBookの実行順は、lbvserver-comp、sg-comp、lb-sg-binding-compのようになります。

したがって、StyleBookの作成者がコンポーネントの正確な順序を気にする必要はありません。コンポーネントはどのような順序で記載しても構いません。コンパイラにより、コンポーネント間の参照関係に基づいて適切なコンポーネントの実行順序が計算されます。この依存関係の検出と並べ替えは、substitutionセクションおよびoutputsセクションにも適用されることに注意してください。

循環依存関係

コンポーネントは別のコンポーネントを参照することがあるため、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-comp、lb-sg-binding-comp、sg-comp の 3 つのコンポーネントがあります。 lbvserver-complb-sg-binding-comp に依存し、lb-sg-binding comp は sg-compに依存し、 sg-comp は lbvserver-comp に依存します。このように、これらのコンポーネント間で依存関係の循環が生じており、この循環は自動で解決できません。このため、このStyleBookは実行できません。StyleBookコンパイラはこれを検出し、StyleBookがNetScaler ADM にインポートされないようにします。

依存関係の検出