En este tema, aprenderemos cómo utilizar condicionales y bucles en los playbooks de Ansible. Estas estructuras de control son fundamentales para crear playbooks más dinámicos y flexibles.
Condicionales en Ansible
Los condicionales permiten ejecutar tareas basadas en ciertas condiciones. En Ansible, se utilizan las directivas when
para definir estas condiciones.
Sintaxis Básica
La sintaxis básica para un condicional en Ansible es:
Ejemplo Práctico
Supongamos que queremos instalar un paquete solo si el sistema operativo es Ubuntu. El playbook se vería así:
- name: Instalar paquete en Ubuntu apt: name: htop state: present when: ansible_facts['os_family'] == "Debian"
Explicación del Código
name
: Descripción de la tarea.apt
: Módulo utilizado para gestionar paquetes en sistemas basados en Debian.name
: Nombre del paquete a instalar.state
: Estado deseado del paquete (present
para instalar).when
: Condición que debe cumplirse para que la tarea se ejecute. En este caso, se verifica si el sistema operativo pertenece a la familia Debian.
Condicionales Múltiples
También puedes utilizar múltiples condiciones combinadas con operadores lógicos (and
, or
):
- name: Instalar paquete en Ubuntu 18.04 apt: name: htop state: present when: ansible_facts['os_family'] == "Debian" and ansible_facts['distribution_version'] == "18.04"
Bucles en Ansible
Los bucles permiten ejecutar una tarea varias veces con diferentes valores. En Ansible, se utilizan las directivas loop
para definir estos bucles.
Sintaxis Básica
La sintaxis básica para un bucle en Ansible es:
Ejemplo Práctico
Supongamos que queremos instalar varios paquetes. El playbook se vería así:
- name: Instalar múltiples paquetes apt: name: "{{ item }}" state: present loop: - htop - curl - git
Explicación del Código
name
: Descripción de la tarea.apt
: Módulo utilizado para gestionar paquetes en sistemas basados en Debian.name
: Nombre del paquete a instalar, que se toma de la lista definida enloop
.state
: Estado deseado del paquete (present
para instalar).loop
: Lista de valores que se iterarán.
Bucles con Diccionarios
También puedes utilizar bucles con diccionarios para pasar múltiples parámetros:
- name: Crear usuarios user: name: "{{ item.name }}" state: present groups: "{{ item.groups }}" loop: - { name: 'user1', groups: 'sudo' } - { name: 'user2', groups: 'admin' }
Explicación del Código
name
: Descripción de la tarea.user
: Módulo utilizado para gestionar usuarios.name
: Nombre del usuario a crear, que se toma del diccionario definido enloop
.state
: Estado deseado del usuario (present
para crear).groups
: Grupos a los que el usuario debe pertenecer, que se toma del diccionario definido enloop
.loop
: Lista de diccionarios con los parámetrosname
ygroups
.
Ejercicio Práctico
Ejercicio 1: Condicionales
Escribe un playbook que instale el paquete vim
solo si el sistema operativo es CentOS.
- name: Instalar vim en CentOS yum: name: vim state: present when: ansible_facts['os_family'] == "RedHat"
Ejercicio 2: Bucles
Escribe un playbook que cree tres usuarios (user1
, user2
, user3
) y los añada al grupo developers
.
- name: Crear usuarios y añadirlos al grupo developers user: name: "{{ item }}" state: present groups: developers loop: - user1 - user2 - user3
Resumen
En esta sección, hemos aprendido cómo utilizar condicionales y bucles en los playbooks de Ansible. Los condicionales (when
) nos permiten ejecutar tareas basadas en ciertas condiciones, mientras que los bucles (loop
) nos permiten iterar sobre listas de valores o diccionarios para ejecutar tareas repetitivas. Estas estructuras de control son esenciales para crear playbooks más dinámicos y flexibles.
En el próximo módulo, profundizaremos en los roles de Ansible, una forma avanzada de organizar y reutilizar el código de tus playbooks.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible