ネストされた繰り返し

最終公開日 : Oct 02, 2026
ネストされた繰り返しコンストラクトを使用すると、コンポーネントの定義に応じて、各コンポーネントに複数の繰り返しコンストラクトを含めることができます。2レベルのネストされた繰り返しを考えてみましょう。外側のリスト(最初の繰り返しリスト)の各要素に対して、内側のリスト(2番目の繰り返しリスト)のすべての要素に対して繰り返しリストを作成できます。StyleBookコンパイラは、最大3つのネストされた繰り返しをサポートしています。各繰り返しレベルには、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 で指定された各IPアドレスに対して、$parameters.vip-ports で指定されたすべてのポートに対して lbvserver 設定オブジェクトを作成します。プロパティセクションでは、IPアドレスとポートの組み合わせに「lb」をプレフィックスとしてオブジェクトの名前を定義します。したがって、各反復において、$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