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:

- name: Nombre de la tarea
  module_name:
    parametro1: valor1
    parametro2: valor2
  when: condicion

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:

- name: Nombre de la tarea
  module_name:
    parametro1: "{{ item }}"
  loop: 
    - valor1
    - valor2
    - valor3

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 en loop.
  • 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 en loop.
  • state: Estado deseado del usuario (present para crear).
  • groups: Grupos a los que el usuario debe pertenecer, que se toma del diccionario definido en loop.
  • loop: Lista de diccionarios con los parámetros name y groups.

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.

© Copyright 2024. Todos los derechos reservados