Saltar a contenido

Control de Flujo del Rulebook

If-then-else

Las reglas pueden contener operaciones if que ejecutan declaraciones condicionales.

do:
  - res = shell: curl http://myserver
  - if: "{{ res.rc > 0 && res.rc < 128 }}"
    then:
       - fail: invalid server
       - if: "{{ /resolve/.exec( res.output ) }}"
         then:
           - echo: "a DNS error maybe?"
         else:
           - echo: 'something else then'

Bucles Foreach

Los bucles foreach están destinados a ejecutar un bloque do sobre datos o el contenido de una variable de array usando la declaración foreach.

do:
   - foreach:
         var: server
         in:
            - server1
            - server2
         do:
            - curl -LO http://${server1}/test_url

Lo mismo se puede lograr con variables:

vars:
   - servers:
        - server1
        - server2
do:
   - foreach:
         var: server
         in: ${servers}
         do:
            - curl -LO http://${server1}/test_url

Tenga en cuenta que el argumento var, que contiene el nombre de la variable que está recibiendo cada uno de los valores en el array in, es una cadena simple, sin ningún marcador de plantilla de variable como ${ } o {{ }}, mientras que el contenido del argumento in necesita ser resuelto.

Bucles Foreach anónimos

También puede usar una notación más rápida para bucles Foreach, sin definir una variable de asignación. En ese caso, la variable especial it se establecerá con el valor del bucle.

do:
  - foreach: [ 'server1', 'server2' ]
    do:
       - curl -LO http://${it}/test_url

Bucles While

También puede construir bucles usando código ClaJS en línea. Esto es útil para validación de bucles complejos.

do:
    - ok =: false
    - while: "{{ ! ok }}"
      do:
         - res = shell: curl -LO http://${server1}/test_url
         - ok =: "{{ res.rc == 0 }}"

Puede usar bucles while para recorrer un contador:

do:
  - ok =: '{{ 0 }}'   # los valores yaml no son numéricos, use JS para asignar como Int
  - while: "{{ ok < 100 }}"
    do:
       - echo: ${ok}
       - ok =: "{{ ok + 1 }}"

Return

La operación return sale del bloque do actual. Puede anidar bloques do dentro de bloques do para un mejor control de flujo, o mejor, use def para definir funciones claramente delimitadas.

Asegúrese de usar un return: simple (seguido de dos puntos) si no se proporciona ningún valor de retorno, de lo contrario se ejecutará como un comando shell local en un contenedor Docker.

do:
  - echo: lets try something
  - do:
      - res = shell: curl http://myserver
      - echo: "Exit code was ${res.rc}"
      - if: '{{ res.rc > 0 }}'
        then:
          - echo: 'we are out of here'
          - return:
      - echo: "everything looks good, so continue"

Fail

Para salir del programa actual, también puede llamar a fail:. Esto lanzará un error hacia arriba en el ámbito, y solo puede ser capturado por un try-catch.