重复构造
您可以使用组件的 repeat 构造来构建多个相同类型的配置对象。
在下面的示例中,members-svcg-comp 组件用于将一组服务绑定到父组件创建的服务组。为了创建将每个服务器绑定到服务组的配置对象,请使用 repeat 构造来迭代为参数 svc-servers 指定的服务列表。在迭代过程中,该组件为服务组中的每个服务(在 repeat-item 构造中称为 serv)创建一个类型为 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
<!--NeedCopy-->
repeat 本身就是一个对象,repeat-list和 repeat-item 是重复对象的属性。
- 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
<!--NeedCopy-->
除了能够在列表上以白色迭代方式引用当前项目外,还可以使用 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
<!--NeedCopy-->
与 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
<!--NeedCopy-->
已复制!
失败!