依存関係の検出
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
上記の例では、lbvserver-comp、lb-sg-binding-comp、および sg-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
上記の例では、lbvserver-comp、lb-sg-binding-comp、および sg-comp の3つのコンポーネントがあります。
lbvserver-comp コンポーネントは、lb-sg-binding-comp、lb-sg-binding コンポーネントに依存しています。そして、これらのコンポーネントは sg-comp に依存しています。sg-comp コンポーネントは lbvserver-comp に依存しています。ここでは、これらのコンポーネント間に依存関係の循環が形成されており、これは自動的に解決できません。その結果、このStyleBookは実行できません。StyleBookコンパイラはこれを検出し、StyleBookがNetScaler Consoleにインポートされるのを防ぎます。