プロパティ-デフォルトソース構成
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
<!--NeedCopy-->
上記の例では、componentsセクションで定義されているすべてのプロパティの値は$parameters.lbオブジェクトから取得されていることに注目してください。これらのプロパティは1つのソースから取得されますが、StyleBookで再定義されています。さらに、lbvserver
の設定に関連する $parameters.lbオブジェクトの新しいサブパラメータが追加された場合、lb-comp コンポーネントを更新して、新しいサブパラメータに対応する新しいプロパティを追加する必要があります。
プロパティの再定義を避け、コンポーネントのすべての関連プロパティをpropertiesセクションで明示的にリストすることなく取得するために、properties-default-sources構造を使用できます。上の例は、次のように記述することもできます。
parameters:
-
name: lb
type: ns::lbvserver
components:
-
name: lb-comp
type: ns::lbvserver
properties-default-sources:
- $parameters.lb
<!--NeedCopy-->
上の例では、properties-default-sources構造を使用することでコンポーネント定義のサイズが小さくなり、そのためにコンポーネントを簡潔に定義できています。さらに、コンポーネントのプロパティのソースが変更されるたびに、変更内容が自動的に反映されます。たとえば、$parameters.lb オブジェクトに新しいプロパティ、persistencetype
などが追加されると、persistencetype
プロパティはlbvserver
のプロパティであるため、デフォルトでは lb-comp の設定に追加されます。このように、properties-default-sources構造は、コンポーネントのプロパティのソースに対して行われる変更を気にすることなくコンポーネントを定義できる動的なインターフェイスを提供します。
コンポーネントのプロパティの計算
このセクションでは、コンポーネントでproperties-default-sources構造を使用した場合にプロパティがどのように取得されるかについて説明します。まず、StyleBooks コンパイラーは、その型に基づいてコンポーネントのプロパティのリストを識別します (上記の例では lbvserver
)次に、コンパイラーは (コンポーネントの properties-default-sources セクションで) 定義された順序で複数のソースからこれらのプロパティを取得します。プロパティが複数のソースに存在する場合は、最後のソースに出現するプロパティがほかのプロパティより優先されます。最後に、properties-default-sources構造を使用して取得されたプロパティは、コンポーネントのpropertiesセクションで上書きすることができます。コンポーネントセクションの定義には、少なくともプロパティー default-sources セクションまたはプロパティセクションがあることに注意してください。両方のセクションを持つこともできます。