プロパティーズ・デフォルト・ソース 構成要素
properties-default-sources 構成要素は、parameters-default-sources 構成要素に類似しています。parameters-default-sources 構成要素が(他のStyleBookからの)既存のパラメーターをStyleBook内で再利用できるようにするのに対し、properties-default-sources 構成要素は、既存のソースに基づいてコンポーネントのプロパティを指定することを可能にします。
コンポーネントのプロパティは、StyleBookのさまざまなセクションに分散している場合があります。例えば、プロパティはオブジェクトパラメーター、オブジェクトを返す置換、他のコンポーネントのプロパティ、または他のコンポーネントの出力から取得される場合があります。そのような場合、コンポーネントの定義において、StyleBookの他のセクションに存在するプロパティを再定義する必要があります。明らかに、これは冗長であり、エラーにつながる可能性があります。この問題に対処するために、properties-default-sources 構成要素を使用できます。properties-default-sources 構成要素は、各項目がコンポーネントのいくつかのプロパティのソースを識別するリストです。
例えば、lbvserver構成を作成するコンポーネントを考えてみましょう。このコンポーネントは、lbvserverのプロパティを次のように定義する必要があります。
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties:
name: $parameters.lb.name
ipv46: $parameters.lb.ipv46
port: $parameters.lb.port
servicetype: $parameters.lb.servicetype
lbmethod: $parameters.lb.lbmethod
上記の例では、コンポーネントセクションで定義されているすべてのプロパティの値が$parameters.lbオブジェクトから取得されていることに注目してください。それらは単一のソースから取得されていますが、プロパティはStyleBookで再度定義されています。さらに、$parameters.lbオブジェクトにlbvserverの構成に関連する新しいサブパラメーターが追加された場合、新しいサブパラメーターに対応する新しいプロパティを追加するためにlb-compコンポーネントを更新する必要があります。
プロパティの再定義を避け、プロパティセクションに明示的にリストすることなくコンポーネントのすべての関連プロパティを取得するために、properties-default-sources 構成要素を使用できます。上記の例は次のように記述できます。
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties-default-sources:
- $parameters.lb
上記の例では、properties-default-sources 構成要素を使用することで、コンポーネント定義のサイズが削減され、コンポーネントを簡潔に定義できるようになります。さらに、コンポーネントのプロパティのソースが変更されるたびに、その変更は自動的に反映されます。例えば、「persistencetype」という新しいプロパティが$parameters.lbオブジェクトに追加された場合、persistencetypeはlbvserverのプロパティであるため、このプロパティはデフォルトでlb-compの構成に追加されます。したがって、properties-default-sources 構成要素は、コンポーネントのプロパティのソースで発生する変更を心配することなく、コンポーネントを定義するための動的なインターフェースを提供します。
コンポーネントのプロパティの計算
このセクションでは、properties-default-sources 構成要素がコンポーネントで使用された場合に、プロパティがどのように取得されるかについて説明します。まず、StyleBooksコンパイラは、そのタイプ(上記の例ではlbvserver)に基づいてコンポーネントのプロパティのリストを識別します。次に、コンパイラは、定義されている順序(コンポーネントのproperties-default-sourcesセクション)で、複数のソースからこれらのプロパティを取得します。複数のソースにプロパティが存在する場合、最後のソースに現れるプロパティが他のプロパティよりも優先されます。最後に、properties-default-sources 構成要素を使用して取得されたプロパティは、コンポーネントのプロパティセクションで上書きできます。コンポーネントセクションの定義には、少なくともproperties-default-sourcesセクションまたはpropertiesセクションのいずれかを含める必要があることに注意することが重要です。両方を含めることもできます。