En este paso, aprenderá cómo usar variables en un playbook de Ansible. Las variables son esenciales para hacer su automatización flexible, reutilizable y más fácil de leer y mantener. En lugar de codificar valores como nombres de paquetes o rutas de archivos directamente en sus tareas, puede definirlos como variables y referenciarlos en todo el playbook. Crearemos un playbook simple que utiliza variables para instalar el servidor web Apache (httpd) y desplegar una página web básica.
-
Navegar al Directorio del Proyecto
Primero, asegúrese de estar en el directorio de trabajo correcto. Todo su trabajo para este laboratorio se realizará dentro del directorio ~/project, que ha sido creado para usted.
cd ~/project
Instale el paquete ansible-core.
sudo dnf install -y ansible-core
-
Crear el Playbook de Ansible
Ahora, creemos nuestro archivo de playbook. Lo llamaremos playbook.yml. Puede usar un editor de texto de línea de comandos como nano para crear y editar el archivo.
nano playbook.yml
Este comando abre un archivo vacío en el editor nano. Ahora, agregue la parte inicial del playbook. Esta sección define el nombre del play, el host de destino (localhost, ya que lo estamos ejecutando en la misma máquina) y una sección vars donde definiremos nuestras variables.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
Aquí hay un desglose de la estructura del playbook:
hosts: localhost: Especifica que el playbook debe ejecutarse en la máquina local.
become: true: Indica a Ansible que use la escalada de privilegios (equivalente a sudo) para las tareas, lo cual es necesario para instalar software.
vars: Este es un diccionario donde definimos nuestros pares clave-valor para las variables. Hemos definido web_pkg para el nombre del paquete y web_content para el contenido de nuestra página web de prueba.
-
Agregar Tareas al Playbook
A continuación, debajo de la sección vars, agregue las tasks que utilizarán estas variables. La primera tarea instalará el paquete Apache y la segunda creará un archivo index.html. Agregue el siguiente bloque tasks a su archivo playbook.yml mientras aún está en el editor nano.
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Observe cómo usamos {{ variable_name }} para referenciar las variables que definimos anteriormente. Esto es Jinja2 templating, que Ansible utiliza para las variables. Esto hace que las definiciones de tareas sean genéricas; si quisiera instalar Nginx en su lugar, solo necesitaría cambiar la variable web_pkg, no la tarea en sí.
-
Revisar y Guardar el Playbook
Su archivo playbook.yml completo debería verse así ahora. Verifique el contenido y la indentación, ya que YAML es muy sensible al espaciado.
---
- name: Deploy Apache using variables
hosts: localhost
become: true
vars:
web_pkg: httpd
web_content: "Hello from Ansible Variables"
tasks:
- name: Install the latest version of Apache
ansible.builtin.dnf:
name: "{{ web_pkg }}"
state: latest
- name: Create a basic index.html file
ansible.builtin.copy:
content: "{{ web_content }}"
dest: /var/www/html/index.html
Para guardar el archivo en nano, presione Ctrl+X, luego Y para confirmar los cambios y finalmente Enter para escribir el archivo con el nombre playbook.yml.
-
Verificar la Sintaxis del Playbook
Antes de ejecutar un playbook, siempre es una buena práctica verificar su sintaxis en busca de errores.
ansible-playbook --syntax-check playbook.yml
Si la sintaxis es correcta, verá la ruta del archivo del playbook como salida, confirmando que es válido:
playbook: playbook.yml
Si ve algún error, vuelva a abrir el archivo con nano playbook.yml y corríjalos. Preste mucha atención a la indentación correcta (generalmente dos espacios).
-
Ejecutar el Playbook
Ahora, ejecute el playbook. Ansible se conectará a localhost, leerá las variables y ejecutará las tareas.
ansible-playbook playbook.yml
Debería ver una salida que indique la ejecución exitosa de cada tarea. El estado changed significa que Ansible realizó una modificación en el sistema, como instalar un paquete o crear un archivo.
PLAY [Deploy Apache using variables] *******************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Install the latest version of Apache] ************************************
changed: [localhost]
TASK [Create a basic index.html file] ******************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Si ejecuta el playbook una segunda vez, las tareas deberían reportar ok en lugar de changed, porque el paquete ya está instalado y el archivo ya tiene el contenido correcto. Esto demuestra la idempotencia de Ansible.
-
Verificar la Configuración Manualmente
Aunque el playbook ha finalizado, puede verificar manualmente que las tareas funcionaron como se esperaba. Primero, verifique si se instaló el paquete httpd:
rpm -q httpd
La salida debería mostrar el nombre y la versión del paquete:
httpd-2.4.57-7.el9.x86_64
A continuación, verifique el contenido del archivo index.html:
cat /var/www/html/index.html
La salida debería coincidir con el valor de su variable web_content:
Hello from Ansible Variables
Ha utilizado variables con éxito en un playbook de Ansible para configurar un sistema.