繰り返しコンストラクト
コンポーネントの repeat コンストラクトを使用して、同じタイプの複数の構成オブジェクトを構築できます。
以下の例では、members-svcg-comp コンポーネントは、サービスのリストを親コンポーネントによって作成されたサービスグループにバインドするために使用されます。各サーバーをサービスグループにバインドする構成オブジェクトを作成するには、repeat コンストラクトを使用して、パラメーター svc-servers に指定されたサービスのリストを反復処理します。反復処理中に、コンポーネントはサービスグループ内の各サービス(repeat-item コンストラクトでは srv と呼ばれます)に対して、タイプ servicegroup_servicegroupmember_binding の NITRO オブジェクトを作成し、各 NITRO オブジェクトの ip 属性を、対応するサービスの IP アドレスに設定します。
例:
components:
-
name: my-lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
components:
-
name: my-svcg-comp
type: ns::servicegroup
properties:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
components:
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver\servicegroup\binding
properties:
name: $parent.parent.properties.name
servicegroupname: $parent.properties.name
-
name: members-svcg-comp
type: ns::servicegroup\servicegroupmember\binding
repeat:
repeat-list: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: $parameters.svc-port
servicegroupname: $parent.properties.name
repeat はそれ自体がオブジェクトであり、repeat-list と repeat-item は repeat オブジェクトの属性です。
-
repeat-list は、コンポーネントが反復処理するリストを識別する必須属性です。
-
repeat-item はオプションであり、反復処理中の現在の項目にわかりやすい名前を付けるために使用されます。
指定されていない場合、現在の項目は式 $repeat-item を使用してアクセスできます。上記の例の最後のコンポーネントは、次のように記述することもできます。
-
name: members-svcg-comp
type: ns::servicegroup_servicegroupmember_binding
repeat:
repeat-list: $parameters.svc-servers
properties:
ip: $repeat-item
port: $parameters.svc-port
servicegroupname: $parent.properties.name
リストを反復処理する際に現在の項目を参照できるだけでなく、repeat-index を使用してリスト内の項目の現在のインデックスを参照することも可能です。以下の例では、repeat-index を使用して現在のインデックスに基づいてポート番号を計算しています。
name: services
type: ns::service
repeat:
repeat-list: $parameters.app-services
repeat-item: srv
properties:
ip: $parameters.app-ip
port: $parameters.base-port + repeat-index
servicegroupname: $parent.properties.name
repeat-item コンストラクトと同様に、反復処理の現在のインデックスを参照するために、異なる変数名を割り当てることができます。前の例は、以下の例と同等です。
-
name: services
type: ns::service
repeat:
repeat-list: $parameters.app-services
repeat-item: srv
repeat-index: idx
properties:
ip: $parameters.app-ip
port: $parameters.base-port + $idx
servicegroupname: $parent.properties.name