Répéter la construction

Vous pouvez utiliser la construction répétée d’un composant pour créer plusieurs objets de configuration du même type.

Dans l’exemple suivant, le composant members-svcg-comp est utilisé pour lier la liste des services au groupe de services créé par le composant parent. Pour créer un objet de configuration qui lie chaque serveur au groupe de services, utilisez la construction de répétition pour parcourir la liste des services spécifiés pour le paramètre svc-servers. Pendant l’itération, le composant crée un objet NITRO de type servicegroup_servicegroupmember_binding pour chaque service (appelé srv dans la construction repeat-item ) dans le groupe de services, et il définit l’attribut ip dans chaque NITRO à l’adresse IP du service correspondant.

Exemple :

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

La répétition est un objet en soi, et la liste de répétition et l’élément de répétition sont des attributs de l’objet de répétition.

  • repeat-list est un attribut obligatoire qui identifie la liste sur laquelle le composant itère.
  • repeat-item est facultatif et est utilisé pour donner un nom convivial à l’élément courant dans l’itération.

Si non spécifié, l’élément actuel est accessible à l’aide de l’expression $repeat-item. Le dernier composant de l’exemple ci-dessus peut également être écrit comme suit :

          -

          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

En plus de pouvoir faire référence à l’élément courant en blanc itérant sur une liste, il est également possible de faire référence à l’index courant de l’élément dans la liste en utilisant l’ index répété. Dans l’exemple suivant, l’ index répété est utilisé pour calculer un numéro de port basé sur l’index courant :

             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

Semblable à la construction repeat-item, vous pouvez attribuer un nom de variable différent pour faire référence à l’index courant de l’itération. L’exemple précédent est équivalent à l’exemple suivant :

     -

             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

Répéter la construction