Application Delivery Management

重复构造

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