Cinco servidores, cinco configuraciones
Una pequeña gestoría tiene cinco servidores web. Cada uno lo montó una persona distinta, a mano, durante dos años. Uno responde despacio y nadie sabe por qué.
La solución es escribir la configuración en un archivo y dejar que una herramienta ponga cada máquina igual. Si un servidor muere, montas otro idéntico en minutos.
Al terminar esta lección
Nota
Puedo escribir un playbook que configure una máquina y que no cambie nada la segunda vez que se ejecuta.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Playbook | archivo que lista cómo deben estar las máquinas | |
| Tarea | un paso de un playbook | |
| Módulo | herramienta incluida que usa una tarea | ansible.builtin.file |
| Inventario | la lista de máquinas que se gestionan | |
| Idempotente | seguro de repetir, porque la segunda vez no cambia nada | |
| Plantilla | archivo con huecos que rellenan las variables |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un playbook dice cómo debe estar la máquina
Un playbook no dice "crea una carpeta". Dice "esta carpeta debe existir".
La herramienta mira la máquina, ve qué está ya bien y arregla solo lo que falla. Tú describes el estado final. La herramienta encuentra los pasos.
Esta máquina virtual tiene una carpeta de proyecto. Entra y lee sus archivos. Los Run comparten una terminal, así que el cambio de carpeta se mantiene.
Entra en la carpeta del proyecto
cd ~/ansible-labSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el playbook
cat site.ymlSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee el inventario
cat inventory.iniSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo dos veces y no cambia nada más
Una tarea idempotente se puede ejecutar muchas veces con el mismo resultado. La primera vez hace el trabajo. La segunda no encuentra nada que hacer.
Pruébalo. El siguiente Run escribe un playbook pequeño, practice.yml. Crea una carpeta y una nota en /tmp. Está junto a site.yml y no lo toca.
Escribe tu playbook de práctica
printf '%s\n' '- hosts: localhost' ' gather_facts: false' ' vars:' ' team: Finanzas' ' tasks:' ' - name: Crear carpeta de notas' ' ansible.builtin.file:' ' path: /tmp/notas-demo' ' state: directory' ' - name: Escribir una nota' ' ansible.builtin.copy:' ' dest: /tmp/notas-demo/nota.txt' ' content: "Hola {{ team }}"' > practice.ymlSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo la primera vez
ansible-playbook practice.ymlSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo otra vez
ansible-playbook practice.ymlSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error frecuente
Advertencia
Mucha gente cree que un playbook es un script de shell escrito en YAML. Un script hace todos los pasos siempre. Un módulo de playbook comprueba primero y actúa solo si hace falta. Usa el módulo shell solo si no hay otro, porque informa de un cambio en cada ejecución.
Una plantilla rellena huecos con variables
Una plantilla es un archivo con huecos, como {{ site_name }}. Una variable rellena cada hueco al crear el archivo.
Cambia la variable y el archivo cambia, sin editarlo a mano. Puedes fijar una variable en la línea de comandos con -e. Y --check hace una prueba en seco (dry run): dice qué cambiaría, sin cambiar nada.
Lee primero la plantilla del laboratorio. Después cambia el equipo en tu playbook de práctica.
Lee la plantilla del laboratorio
cat templates/welcome.txt.j2Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecútalo con otro equipo
ansible-playbook practice.yml -e team=SoporteSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Prueba en seco: ¿qué volvería a cambiar?
ansible-playbook practice.yml --check --diffSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lee la nota
cat /tmp/notas-demo/nota.txtSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para ir más lejos
Escribe un segundo playbook, shell.yml, con una sola tarea que use ansible.builtin.shell para ejecutar date > /tmp/notas-demo/hora.txt. Ejecútalo dos veces y lee el resumen de cada una.
Después añade a la tarea args: con creates: /tmp/notas-demo/hora.txt y ejecútalo otras dos veces. Explica qué cambió en el resumen y por qué.