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.