Bucles ansibles

“Ansible es una herramienta de código abierto de Red Hat Inc., que se utiliza para automatizar muchas de las tareas de infraestructura de TI. Se puede usar para una amplia gama de tareas, como instalar paquetes de software, agregar nodos de cómputo, aprovisionar recursos y muchas otras. Tiene una serie de módulos que se pueden usar para administrar múltiples tareas relacionadas con la configuración.

Ansible no tiene agente y está instalado en un host de control llamado controlador. El trabajo del controlador es administrar máquinas remotas a través de SSH y otros mecanismos de comunicación compatibles.

Los bucles son útiles para realizar varias tareas de una sola vez, como crear varios usuarios, instalar varios paquetes o ejecutar repetidamente una tarea hasta que una condición sea verdadera o falsa.

Ansible usa YAML (YAML Ain’t Markup Language), un lenguaje de serialización de datos, para sus playbooks. Un código Ansible se puede minimizar mediante el uso de bucles, es decir, iterando sobre secuencias o asignaciones”.

¿Qué cubriremos?

En esta guía, hablaremos sobre los bucles en Ansible y veremos algunos ejemplos específicos de cómo usarlos dentro de los libros de jugadas.

requisitos previos

1. Conceptos básicos de Ansible: funcionamiento y cómo ejecutar playbooks.

2. Laboratorio para realizar esta guía: puede configurarlo usando Vagrant y VirtualBox.

Bucles en Ansible

Ansible proporciona tres palabras clave para realizar una operación de bucle: loop, with_ y till. Los bucles generalmente se usan para crear múltiples usuarios, modificando la propiedad de archivos y directorios e iterando sobre una instrucción hasta que se cumple una condición.

Bucles estándar o simples

Los bucles estándar se pueden usar para iterar sobre una lista simple de cadenas que se pueden definir directamente dentro de una tarea, como se muestra a continuación. Tomemos un simple example de esta. Crear un libro de jugadas:

                      $ nano my-playbook

- name: Add multiple users

hosts: managed1

become: yes

tasks:

- name: Add three users using Loops

user:

name: "{{ item }}"

state: present

loop:

- myuser1

- myuser2

                    

En el libro de jugadas anterior, Ansible crea múltiples usuarios en una sola tarea usando Loops. Además, utiliza el módulo “usuario” para crear los usuarios anteriores.

Para cada iteración del bucle, los valores de la lista se sustituyen en la variable del elemento.

Explicando el libro de jugadas

  1. En el módulo de “usuario”, no hemos dado ningún nombre directamente; en su lugar, se utiliza una variable {{ item }} con el parámetro “nombre”.
  2. Bajo la palabra clave “bucle”, se enumeran los nombres de usuario que se utilizarán. Estos nombres de usuario reemplazan el {{ item }} cuando el libro de jugadas se ejecuta realmente.
  3. Mientras se ejecuta la tarea, se enumera solo una vez, pero se enumeran tres modificaciones justo debajo. Lo veremos pronto.

Bucles sobre una lista de hashes

Los bucles también se pueden usar para iterar sobre hashes. Por ejemplo, si los usuarios necesitan ser asignados a distintos grupos adicionales, debemos hacerlo como:

                      - username: my_user1

groups: production

- username: my_user2

groups: development

- username: my_user3

groups: staging

                    

Aquí, los grupos ya están presentes en las máquinas remotas. Solo los estamos agregando a los usuarios que usan Loops.

El módulo “usuario” utiliza un parámetro opcional llamado “grupos” para enumerar usuarios adicionales. Para obtener una lista de hashes, podemos hacer referencia a subclaves en un bucle. Para este propósito, usamos la palabra clave {{ item }}. Como ilustración, considere el siguiente fragmento de un libro de jugadas:

                      - name: Add multiple users

hosts: managed1

become: yes

tasks:

- name: Add three users using Loops

ansible.builtin.user:

name: "{{ item.username }}"

state: present

groups: "{{ item.groups }}"

loop:

- { username: 'my_user1', groups: 'production' }

- { username: 'my_user2', groups: 'development' }

- { username: 'my_user3', groups: 'staging' }

                    

Bucles de Ansible con condicionales

Los condicionales se pueden usar con bucles para iterar sobre una secuencia hasta que una condición sea verdadera. Para example, la declaración “cuando” se puede utilizar para este propósito. En este caso, Ansible procesa cada condición por separado. Con esta técnica, se puede ejecutar una tarea para algunos elementos y omitirla para otros; por exampleconsidere el siguiente caso:

                      tasks:

- name: Print numbers smaller than 46

ansible.builtin.command: echo {{ item }}

loop: [ 1, 5, 44, 56, 48, 9, 4 ]

when: item < 46

                    

La tarea debe imprimir todos los elementos, aquí números menores de 46, cuando se ejecuta e imprimir el resultado en la terminal. El my-playbook.yml completo, en este caso, será:

                      ---

- hosts: all

gather_facts: yes

become: true

tasks:

- name: Print numbers smaller than 46

ansible.builtin.command: echo {{ item }}

loop: [ 1, 5, 44, 56, 48, 9, 4 ]

when: item < 46

                    

Ahora ejecute el libro de jugadas usando el siguiente comando:

                      $ ansible-playbook my_playbook.yml -i /path/to/inventory/file

                    

Aquí el comando echo se ejecutará en aquellos valores de los elementos que son menores que 46; esto se puede observar en la salida del terminal.

Conclusión

En esta guía, hemos aprendido sobre Ansible Loops y hemos visto varios casos de uso. Para explorar más sobre “cómo usar bucles con diccionarios, índices, etc.”, consulte la documentación oficial de Ansible.

Referencias:

  1. https://www.ciscolive.com/c/dam/r/ciscolive/apjc/docs/2019/pdf/DEVWKS-2584.pdf

Related Posts