重复构造
您可以使用组件的 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