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

上記の例では、lbvserver-complb-sg-binding-compsg-compの3つのコンポーネントが定義されています。この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の作成者はコンポーネントの正しい順序について心配する必要はありません。コンポーネントは任意の順序で記述できます。コンパイラは、コンポーネントが互いをどのように参照しているかに基づいて、コンポーネントの正しい実行順序を計算します。この依存関係の検出と並べ替えは、置換セクションと出力セクションでも機能することに注意してください。

循環依存関係

コンポーネントが別のコンポーネントを参照する可能性があるため、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-compsg-compの3つのコンポーネントがあります。lbvserver-compはlb-sg-binding-compに依存し、lb-sg-binding-compはsg-compに依存し、sg-compはlbvserver-compに依存します。ここでは、これらのコンポーネント間に依存関係のサイクルが形成されており、これは自動的に解決できません。結果として、このStyleBookは実行できません。StyleBookコンパイラはこれを検出し、StyleBookがNetScaler® ADMにインポートされるのを防ぎます。

依存関係の検出