Variables y Ficheros de Inventario en Ansible

En Ansible, las variables permiten personalizar las configuraciones sin modificar el código base de los playbooks, lo que facilita la reutilización y escalabilidad. Junto a esto, los ficheros de inventario nos permiten definir los servidores y grupos sobre los que actuará Ansible.

En este artículo, veremos cómo estructurar el inventario, cómo usar variables y cómo aplicarlas en un playbook.


1. Ficheros de Inventario en Ansible

El inventario define los hosts y grupos en los que Ansible ejecutará tareas. Se puede escribir en formato INI o YAML.

Ejemplo en formato INI (inventory.ini):

[nodos_web]
nodo1 ansible_host=192.168.1.10 ansible_user=ubuntu
nodo2 ansible_host=192.168.1.11 ansible_user=ubuntu

Ejemplo en formato YAML (inventory.yml):

all:
  hosts:
    nodo1:
      ansible_host: 192.168.1.10
      ansible_user: ubuntu
    nodo2:
      ansible_host: 192.168.1.11
      ansible_user: ubuntu
  children:
    nodos_web:
      hosts:
        nodo1:
        nodo2:

💡 Recomendación: Usa YAML si trabajas con estructuras más complejas o necesitas definir variables dentro del inventario.

2. Variables en Ansible

Las variables en Ansible pueden definirse de varias formas:

  1. En el playbook
  2. En el inventario
  3. En archivos externos (group_vars y host_vars)
  4. Como argumentos en línea de comandos

Definiendo Variables en un Playbook

Dentro del playbook, podemos definir variables así:

- name: Configurar Apache con variables
  hosts: nodos_web
  become: yes
  vars:
    paquete_apache: apache2
  tasks:
    - name: Instalar Apache
      apt:
        name: "{{ paquete_apache }}"
        state: present

Aquí, la variable paquete_apache puede cambiar sin modificar el resto del código.

Definiendo Variables en el Inventario

Podemos asignar variables a hosts individuales o grupos dentro del inventario:

[nodos_web]
nodo1 ansible_host=192.168.1.10 ansible_user=ubuntu paquete_apache=apache2
nodo2 ansible_host=192.168.1.11 ansible_user=ubuntu paquete_apache=httpd

En este caso, nodo1 instalaría apache2, mientras que nodo2 instalaría httpd.

Usando group_vars y host_vars

Para estructurar mejor las variables, podemos crear carpetas group_vars/ y host_vars/.

Ejemplo de group_vars/nodos_web.yml:

paquete_apache: apache2

Ejemplo de host_vars/nodo1.yml (para variables específicas de un host):

paquete_apache: apache2

💡 Esto nos ayuda a organizar las configuraciones sin saturar el inventario.

3. Aplicando Variables en un Playbook

Un playbook usando variables definidas en el inventario quedaría así:

- name: Configurar Apache usando variables del inventario
  hosts: nodos_web
  become: yes
  tasks:
    - name: Instalar Apache
      apt:
        name: "{{ paquete_apache }}"
        state: present

Ejecutamos el playbook con:

ansible-playbook -i inventory.ini playbook.yml

Las variables y ficheros de inventario en Ansible facilitan la administración y automatización de servidores, permitiendo configuraciones dinámicas sin necesidad de modificar los playbooks. En el próximo post, exploraremos Handlers y Notificaciones en Ansible. 🚀