Cómo pasar variables a los playbooks de Ansible

AnsibleAnsibleBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/InventoryManagementGroup(["Inventory Management"]) ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible/InventoryManagementGroup -.-> ansible/group_variables("Set Group Variables") ansible/InventoryManagementGroup -.-> ansible/host_variables("Set Host Variables") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") ansible/PlaybookEssentialsGroup -.-> ansible/with_items("Iterate Items") subgraph Lab Skills ansible/group_variables -.-> lab-415021{{"Cómo pasar variables a los playbooks de Ansible"}} ansible/host_variables -.-> lab-415021{{"Cómo pasar variables a los playbooks de Ansible"}} ansible/playbook -.-> lab-415021{{"Cómo pasar variables a los playbooks de Ansible"}} ansible/with_items -.-> lab-415021{{"Cómo pasar variables a los playbooks de Ansible"}} end

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:

  1. Parámetros de la línea de comandos (por ejemplo, -e "var=value")
  2. Parámetros de tarea (por ejemplo, vars dentro de una tarea)
  3. Parámetros de inclusión (por ejemplo, vars dentro de un archivo incluido)
  4. Parámetros de bloque (por ejemplo, vars dentro de un bloque)
  5. Parámetros de play (por ejemplo, vars dentro de un play)
  6. Variables predeterminadas de roles (por ejemplo, defaults/main.yml)
  7. Variables de inventario (por ejemplo, en inventory.yml)
  8. Datos de host (por ejemplo, recopilados por el módulo setup)
  9. Variables de roles e inclusiones (por ejemplo, vars/main.yml)
  10. 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.