Veinte ordenadores del aula, todos iguales
Un playbook de Ansible es un archivo que describe cómo debe quedar una máquina. Ansible lo lee y hace los cambios por ti.
Imagina que debes preparar veinte ordenadores del aula con los mismos programas. Hacerlo a mano deja diferencias. Con un guion, todos quedan igual.
Al final de esta lección
Nota
Puedo preparar una máquina siempre igual con un guion.
Palabras clave
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Playbook | el archivo que dice cómo debe quedar una máquina | |
| Tarea | un paso del playbook, como instalar un programa | |
| Módulo | la pieza de Ansible que hace un tipo de tarea | ansible.builtin.package |
| Inventario | la lista de máquinas que Ansible prepara | |
| Idempotente | que repetirlo no cambia nada más | |
| Plantilla | un archivo con huecos que se rellenan con variables |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un playbook dice cómo debe quedar la máquina
Un guion normal dice qué hacer, paso a paso. Un playbook dice cómo debe quedar: este programa instalado, este archivo presente.
Si la máquina ya está así, Ansible no toca nada. Si falta algo, lo hace.
Ejemplo resuelto: a mano o con un guion
| Cuestión | A mano | Con un playbook |
|---|---|---|
| Preparar 20 equipos | 20 veces los mismos pasos | Un solo archivo para los 20 |
| Un paso olvidado | Un equipo queda distinto | El archivo no olvida |
| Saber qué se hizo | Hay que acordarse | Se lee en el archivo |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lee el inventario de máquinas
cat ~/ansible-lab/inventory.iniSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Pregunta a Ansible si llega a la máquina
ansible localhost -m pingSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Qué dicen el inventario y el ping
El inventario tiene una sola máquina, localhost, que es esta misma. La palabra ansible_connection=local dice que no hace falta conectarse por red.
El ping de Ansible no es el de la red. Comprueba que Ansible puede ejecutar cosas en la máquina. Si todo va bien, contesta SUCCESS y pong.
Cada tarea usa un módulo
Un playbook es una lista de tareas. Cada tarea tiene un nombre y usa un módulo, la pieza que sabe hacer ese trabajo.
Hay módulos para instalar un programa, crear una carpeta, copiar un archivo o rellenar una plantilla. Tú dices el resultado y el módulo se encarga.
Ejemplo resuelto: un playbook leído como tabla
| Tarea | Módulo | Lo que pide |
|---|---|---|
| Instalar un editor | package | el programa nano presente |
| Crear una carpeta | file | /etc/aula existe y es de root |
| Escribir un aviso | template | /etc/aula/aviso.txt sale de una plantilla |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Lee una plantilla del proyecto
cat ~/ansible-lab/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.
Repetirlo no cambia nada más
Un playbook es idempotente: se puede ejecutar dos veces y la segunda no cambia nada. La primera instala el programa. La segunda ve que ya está y lo deja.
Así se puede volver a ejecutar sin miedo. También sirve de prueba: si la segunda vez cambia algo, hay una tarea mal hecha.
Prueba la idea con Python
packages = ["nano"]
def ensure(name):
# Solo añade el programa si todavía no está.
if name not in packages:
packages.append(name)
return "changed"
return "ok"
print(ensure("htop"))
print(ensure("htop"))
# Cambia "htop" por "tree" y ejecuta otra vez.
Ejemplo resuelto: dos ejecuciones seguidas
| Tarea | Primera vez | Segunda vez |
|---|---|---|
| Instalar un editor | changed | ok |
| Crear una carpeta | changed | ok |
| Escribir un aviso | changed | ok |
| Resumen | changed=3 | changed=0 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Un error frecuente
Advertencia
Mucha gente cree que ejecutar un playbook otra vez repite todo el trabajo. No es así: cada tarea mira primero cómo está la máquina. Solo cambia lo que no coincide con lo pedido. Una orden suelta de consola, en cambio, se repite siempre.
Para ir más lejos: lee antes de cambiar
Antes del laboratorio, piensa en el modo de prueba de Ansible: ansible-playbook site.yml --check --diff. Enseña qué cambiaría sin cambiar nada.
Cuando tengas tu playbook, ejecútalo primero así. Escribe qué te pareció que iba a cambiar.