重复构造

可以使用组件的重复构造来构建多个相同类型的配置对象。

在下面的示例中,members-svcg-comp 组件用于将一组服务绑定到父组件创建的服务组。为了创建将每个服务器绑定到服务组的配置对象,请使用重复构造来迭代为参数 svc-servers 指定的服务列表。在迭代过程中,组件为服务 组中的每个服务(在 **重复项 结构中称为 srv )创建一个类型为 service group_service group_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-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

除了能够引用当前项目白色迭代列表之外,还可以使用 重复索引引引用列表中项目的当前索引。在以下示例 中,重复索引 用于基于当前索引计算端口号:

             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

重复项构造类似,您可以指定不同的变量名称来引用 迭代的当前索引。上述示例与以下示例等同:

     -

             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

重复构造