嵌套重复

Last published : Oct 06, 2026
使用嵌套重复结构,您可以在每个组件中拥有多个重复结构,具体取决于组件的定义。考虑一个两级嵌套重复。对于外部列表(第一个重复列表)中的每个元素,您可以为内部列表(第二个重复列表)的所有元素创建一个重复列表。StyleBook 编译器支持最多三级嵌套重复。每个重复级别都关联有 repeat-item 和 repeat-index 属性。repeat-item 和 repeat-index 属性都是可选的。此外,每个重复还可以指定一个 repeat-condition。
示例:
parameters:

  -

      name: vips

      type: ipaddress[]

  -

      name: vip-ports

      type: tcp-port[]

components:

  -

      name: lbvservers-comp

      type: ns::lbvserver

      repeat:

         repeat-list: $parameters.vips

         repeat-item: ip

         repeat:

              repeat-list: $parameters.vip-ports

              repeat-item: port

      properties:

         name: str("lb-") + str($ip) + '-' + str($port)

         servicetype: HTTP

         ipv46: $ip

         port: $port
在此示例中,对于 $parameters.vips 中的每个项目,我们遍历 $parameters.vip-ports 的所有项目。因此,对于 $parameters.vips 中指定的每个 ipaddress,我们为 $parameters.vip-ports 中指定的所有端口创建 lbvserver 配置对象。属性部分定义了对象的名称,其中“lb”作为 IP 地址和端口组合的前缀。因此,对于每次迭代,$ip + $port 定义了 IP 地址和端口号的唯一组合。
如果未提供 repeat-item 属性,编译器会为其生成一个默认值。每个重复级别的 repeat-item 默认值分别为:$repeat-item、$repeat-item-1、$repeat-item-2。同样,如果未提供 repeat-index 属性,编译器会为其生成一个默认值。每个重复级别的 repeat-index 默认值分别为:$repeat-index、$repeat-index-1 和 $repeat-index-2。
以下示例描述了在嵌套重复对象中缺少 repeat-item 和 repeat-index 属性时的命名约定。
示例:
components:

-

     name: lbvservers-comp

     type: ns::lbvserver

     repeat:

         repeat-list: $parameters.vips

         repeat:

            repeat-list: $parameters.vip-ports

     properties:

        name: str("lb-") + str($repeat-item) + '-' + str($repeat-item-1)

        servicetype: HTTP

        ipv46: $repeat-item

        port: $repeat-item-1