オプションのプロパティ
場合によっては、コンポーネントのプロパティが式から値を取得することがあります。この式は、パラメーター参照のような単純な式の場合もあれば、より複雑な式の場合もあります。このプロパティ値の設定は、コンポーネントではオプションです。式が実際の値を返す場合にのみプロパティ値を設定することを選択でき、そうでない場合はこのプロパティを設定しないことを選択できます。
たとえば、設定したいプロパティの1つが、タイプがns::lbvserverであるコンポーネントのlbmethod(ロードバランシングアルゴリズム)であるとします。lbmethodプロパティの値は、以下に示すように、ユーザーが提供するパラメーター値から取得されます。
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
lbmethod: $parameters.lb-advanced.algorithm
ここで、パラメーター lb-advanced.algorithm がオプションのパラメーターであるとします。そして、ユーザーがオプションであるためこのパラメーターに値を指定しない場合、式 $parameters.lb-advanced.algorithm は空白値に評価されます。したがって、lbmethodプロパティには無効な値が渡されます。このような状況を避けるために、プロパティ名を「?」で終わらせることで、次のようにプロパティをオプションとして注釈付けできます。
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
lbmethod?: $parameters.lb-advanced.algorithm
「?」を使用すると、右側の式が何も評価されない場合にプロパティが省略されます。これは、この場合、次のように定義されたコンポーネントと同等になります。
components
-
name: lbvserver_comp
type: ns::lbvserver
properties:
name: $parameters.lb-appname + "-lb"
servicetype: $parameters.lb-service-type
ipv46: $parameters.lb-virtual-ip
port: 80
lbmethod はオプションであるため、それを省略しても有効なコンポーネントになります。lbmethodは、そのタイプ「ns::lbvserver」で定義されている場合、デフォルト値を取る可能性があることに注意してください。