Cómo usar bucles en Ansible

Cómo usar bucles en Ansible
Al trabajar con código, es posible que deba ejecutar un bloque de código varias veces. Escribir el mismo bloque de código una y otra vez es redundante y se considera un mal diseño. Aquí es donde entran los bucles.

Los bucles son conjuntos de comandos o instrucciones que están establecidas para repetir un cierto número de veces según los requisitos del usuario. Los bucles permiten un mejor flujo de control en sus scripts y eliminan la redundancia general de ellos.

Ansible también viene con múltiples métodos de bucle de bloques de código. Esta guía está destinada a ayudarlo a aprender sobre bucles en Ansible. Cubriremos los conceptos básicos del bucle en Ansible, junto con la sintaxis y los ejemplos apropiados.

Dicho esto, echemos un vistazo a los bucles en Ansible.

Palabras clave para bucles en Ansible

Ansible usa las siguientes palabras clave para sus estructuras de bucle:

  • "bucle"
  • "con_"
  • "hasta"

Como su nombre indica, "Loop" es el comando de ir a implementar bucles en bloques de código.

Similar a "bucle", tienes "with_". Este comando requiere que le proporcione un complemento de búsqueda. Se recomienda usar with_* en lugar de bucle cuando los complementos de búsqueda están involucrados.

"Hasta" le permite seguir ejecutando una tarea hasta que se cumpla la condición requerida. Es la condición más cercana a la condición "mientras" en el flujo de control.

Ahora que tiene una idea de las palabras clave para bucles, puede proceder a aprender sobre cómo implementarlas en código.

Bucles estándar en Ansible

Comenzaremos discutiendo cómo implementar bucles estándar en Ansible. Para los bucles estándar, usaremos la palabra clave "with_".

Este ejemplo demuestra cómo podemos usar bucles para agregar usuarios.

- Nombre: Agregar varios usuarios
usuario:
Nombre: "item"
Estado: presente
Grupos: "Rueda"
with_items:
- VM1
- VM2

Ahora, el siguiente paso sería ejecutar el libro de jugadas. Puede hacerlo con la ayuda del siguiente comando en el terminal de Linux:

Ansible-Playbook Testbook.YML

Aquí, "Artículo" es el término de búsqueda. "With_item" tiene dos hosts, VM1 y VM2 respectivamente. El bucle hace lo mismo que el siguiente código:

- Nombre: Agregar usuario VM1
usuario:
Nombre: "VM1"
Estado: presente
Grupos: "Rueda"
- Nombre: Agregar usuario VM2
usuario:
Nombre: "VM2"
Estado: presente
Grupos: "Rueda"

Como puede ver, mediante el uso de "with_item", podemos eliminar la redundancia de nuestro código. Al agregar más usuarios en "with_items:", podemos agregar múltiples usuarios según sea necesario.

El siguiente ejemplo cubrirá cómo ejecutar bucles anidados en Ansible.

Bucles anidados en Ansible

Ansible le permite implementar bucles anidados en sus scripts. Un ejemplo de dicho bucle se da a continuación.

- Nombre: Proporciona a los usuarios acceso a bases de datos
mysql_user:
Nombre: "item [0]"
priv: "item [1].*:TODO"
append_privs: sí
Contraseña: "foo"
With_nested:
- ['Linuxuser1', 'Linuxuser2']
- ['Cliente', 'Empleado', 'Proveedor']

Alternativamente, puede escribir el mismo código con "bucle" de la siguiente manera:

- Nombre: Proporciona a los usuarios acceso a bases de datos
comunidad.mysql.mysql_user:
Nombre: "item [0]"
priv: "item [1].*:TODO"
append_privs: sí
Contraseña: "foo"
Loop: "['Linuxuser1', 'Linuxuser2'] | Product (['Cliente', 'Empleado', 'Proveedor']) | List"

Los usuarios recibirán acceso a todas las bases de datos una por una. Como se dijo anteriormente, es más fácil entender que el "with_" es mejor con los complementos de búsqueda en lugar de "bucle" como sintaxis.

Echemos un vistazo a otros ejemplos que destacan la capacidad de Ansible.

Usando Ansible para iterar sobre los hashes

Ansible le permite recurrir a una lista de hashes. Esto se puede ver desde el ejemplo que se da a continuación.

Supongamos que ha declarado una lista de usuarios de la siguiente manera.

Usuarios:
VM1:
Nombre: Máquina virtual 1
Serie: 00000001
VM2:
Nombre: Máquina virtual 2
Serie: 00000002

Para imprimir todos los nombres y series, ejecute el script a continuación.

tareas:
- Nombre: Imprimir información del usuario
depurar:
msg: "usuario elemento.clave es item.valor.nombre (item.valor.serie) "
with_dict: "users"

Esto imprimirá los nombres de usuario y las series respectivamente. Al agregar más usuarios en el panel "Usuarios:", puede imprimir más usuarios sin tener que volver a escribir el código.

Uso de bucles para conjuntos de datos paralelos

También puede usar bucles para conjuntos de datos paralelos. Esto se demuestra en el siguiente ejemplo:

Supongamos que tiene los siguientes datos:

alfabetos: ['a', 'b', 'c', 'd']

NUM: [2, 4, 6, 8]

Puede recorrer estos comandos de la siguiente manera:

tareas:
- depurar:
Msg: "item.0 y item.1 "
con nosotros:
- "alfabetos"
- "num"

El código anterior reunirá ambos conjuntos de datos como (a, 2), (b, 4), etc.

Bucles de elección al azar

Una de las características que vienen con los bucles "With_" es "Random_Choice".

Como su nombre indica, la función de elección aleatoria se usa para seleccionar elementos al azar de un conjunto dado de instrucciones.

Este ejemplo ilustra cómo hacer bucles para seleccionar una acción de una lista dada de cuerdas.

- depurar:
Msg: "item"
with_random_choice:
- "Ejecutar Acción 1"
- "Ejecutar Acción 2"
- "Ejecutar Acción 3"
- "Ejecutar Action 4"

Aquí, la cadena de "acción de ejecución" es arbitraria y se puede reemplazar con cualquier cosa. El comando with_random_choice se seleccionaría de la lista dada de acciones al azar.

Ejemplos de bucle "Hasta" hasta "

Esta sección de la guía será sobre la sintaxis del bucle "hasta".

Como se indicó anteriormente, el comando "hasta" repetirá un cierto conjunto de instrucciones hasta que cumpla con una cierta condición.

Aquí hay un ejemplo del bucle "hasta" en acción.

Shell:/usr/bin/foo

Registrarse: resultado

Hasta: Resultado.stdout.encontrar ("todos los sistemas listos") != -1

Vueltos: 10

Retraso: 7

Este es un ejemplo de un bucle recursivo. El bloque de código anterior continuará ejecutándose hasta que el shell reciba "todos los sistemas listos" como salida de texto. Si ese no es el caso, se detendrá después de funcionar 10 veces, ya que los reintentos especificados son "10".

El retraso corresponde al retraso en segundos. Por defecto, se establece en 5.

Conclusión

Esta fue una guía sobre cómo puede usar bucles en Ansible. Cubrimos los conceptos básicos de los bucles y su sintaxis en Ansible, y demostramos su uso a través de diferentes ejemplos. Con esto, esperamos que esté un paso más cerca de automatizar sus procesos utilizando Ansible.