Introducción
Ansible es una herramienta de automatización poderosa que te permite optimizar la gestión de tu infraestructura IT. Una de las características clave de Ansible es su capacidad para manejar variables, lo que te permite hacer que tus playbooks sean más dinámicos y adaptables. En este tutorial, exploraremos cómo pasar variables a los playbooks de Ansible, desde los conceptos básicos hasta técnicas más avanzadas, para ayudarte a optimizar tus flujos de trabajo de automatización.
Introducción a las variables de Ansible
Ansible es una poderosa herramienta de automatización IT que te permite gestionar tu infraestructura y aplicaciones con facilidad. Una de las características clave de Ansible es su capacidad para trabajar con variables, que se utilizan para almacenar y manipular datos dentro de tus playbooks.
Las variables en Ansible se pueden definir en varios niveles, entre ellos:
Variables a nivel de host
Estas son variables específicas de un host en particular o de un grupo de hosts. Se pueden definir en el archivo de inventario o en archivos de variables separados.
## inventory.yml
all:
hosts:
webserver1:
ansible_host: 192.168.1.100
app_version: 2.0
webserver2:
ansible_host: 192.168.1.101
app_version: 2.1
Variables a nivel de grupo
Estas son variables que se aplican a un grupo de hosts. Se pueden definir en el archivo de inventario o en archivos de variables separados.
## group_vars/webservers.yml
app_name: MyApp
db_host: 10.0.0.50
Variables a nivel de play
Estas son variables específicas de un play en particular dentro de un playbook. Se pueden definir dentro del propio play.
- hosts: webservers
vars:
app_port: 8080
log_level: info
Variables a nivel de tarea
Estas son variables específicas de una tarea en particular dentro de un play. Se pueden definir dentro de la propia tarea.
- name: Install package
apt:
name: "{{ package_name }}"
state: present
vars:
package_name: nginx
Comprender cómo trabajar con estos diferentes tipos de variables es crucial para gestionar eficazmente tus playbooks de Ansible y automatizar tu infraestructura.
Pasar variables a los playbooks de Ansible
Ahora que tienes una comprensión básica de las variables de Ansible, exploremos cómo pasar variables a tus playbooks de Ansible. Hay varias formas de hacer esto:
Argumentos de la línea de comandos
Puedes pasar variables a tu playbook utilizando la opción -e o --extra-vars cuando ejecutes el comando ansible-playbook.
ansible-playbook site.yml -e "app_version=2.2 db_host=10.0.0.60"
Archivos de variables
Puedes definir variables en archivos YAML separados y pasarlas a tu playbook utilizando la opción --extra-vars.
ansible-playbook site.yml --extra-vars "@vars.yml"
## vars.yml
app_name: MyApp
app_version: 2.2
db_host: 10.0.0.60
Variables del inventario
Como se mencionó en la sección anterior, puedes definir variables en tu archivo de inventario y estarán disponibles para tu playbook.
## inventory.yml
all:
hosts:
webserver1:
ansible_host: 192.168.1.100
app_version: 2.0
webserver2:
ansible_host: 192.168.1.101
app_version: 2.1
Variables del playbook
También puedes definir variables dentro de tu playbook utilizando la palabra clave vars.
- hosts: webservers
vars:
app_name: MyApp
app_version: 2.2
db_host: 10.0.0.00
tasks:
- name: Print variables
debug:
msg: "App name: {{ app_name }}, App version: {{ app_version }}, db host: {{ db_host }}"
Al entender estas diferentes formas de pasar variables a tus playbooks de Ansible, puedes hacer que tu automatización sea más flexible y adaptable a diferentes entornos y requisitos.
Manejo avanzado de variables en Ansible
Si bien los métodos básicos para pasar variables a los playbooks de Ansible son sencillos, Ansible también ofrece características más avanzadas para trabajar con variables. Exploremos algunas de ellas:
Precedencia de variables
Ansible tiene un orden de precedencia bien definido para las variables, que es importante entender cuando se trabaja con múltiples fuentes de variables. El orden, de mayor a menor, es el siguiente:
- Parámetros de la línea de comandos (por ejemplo,
-e "var=value") - Parámetros de tarea (por ejemplo,
varsdentro de una tarea) - Parámetros de inclusión (por ejemplo,
varsdentro de un archivo incluido) - Parámetros de bloque (por ejemplo,
varsdentro de un bloque) - Parámetros de play (por ejemplo,
varsdentro de un play) - Variables predeterminadas de roles (por ejemplo,
defaults/main.yml) - Variables de inventario (por ejemplo, en
inventory.yml) - Datos de host (por ejemplo, recopilados por el módulo
setup) - Variables de roles e inclusiones (por ejemplo,
vars/main.yml) - Establecer datos (por ejemplo, utilizando el módulo
set_fact)
Comprender este orden de precedencia puede ayudarte a resolver conflictos y asegurarte de que tus variables se utilicen como se pretende.
Filtros y pruebas de variables
Ansible ofrece un amplio conjunto de filtros y pruebas de Jinja2 que puedes utilizar para manipular y validar tus variables. Algunos ejemplos son:
- Filtro
default:{{ my_var | default('default_value') }} - Filtro
to_json:{{ my_dict | to_json }} - Prueba
is_defined:{% if my_var is defined %}...{% endif %} - Prueba
is_number:{% if my_var is number %}...{% endif %}
Estos pueden ser muy útiles para manejar escenarios de variables complejos.
Variables cifradas con Vault
La función Vault de Ansible te permite cifrar variables confidenciales, como contraseñas o claves de API, para que se puedan almacenar y utilizar de forma segura en tus playbooks. Esto es especialmente importante para mantener la seguridad en la automatización de tu infraestructura.
## vars.yml
db_password: !vault |
$ANSIBLE_VAULT;1.1;AES256
32313633326533343161663036623463
3163303236303836343239653533326134
3134613161623464
Al entender estas técnicas avanzadas de manejo de variables, puedes llevar tu automatización de Ansible al siguiente nivel, haciéndola más robusta, segura y adaptable a las necesidades de tu organización.
Resumen
En este tutorial de Ansible, has aprendido cómo pasar variables a tus playbooks, desde la simple asignación de variables hasta técnicas más complejas de manejo de variables. Al dominar la gestión de variables, puedes crear playbooks de Ansible flexibles y dinámicos que se adapten a las cambiantes necesidades de tu infraestructura. Aplica estas estrategias para mejorar tu automatización impulsada por Ansible y llevar tus operaciones de TI al siguiente nivel.


