¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Etiquetas (tags) y Ansible Vault

Después de esta lección: Puedo ejecutar solo una parte de un playbook y guardar un secreto cifrado.

Lección de 60 min14 comandosLaboratorio de roles de Ansible: un rol, handlers y Vault en una VM Ubuntu

Ejecutar solo una parte y cifrar los secretos

Una etiqueta (en inglés, tag) de Ansible marca tareas para ejecutar solo una parte de un playbook. Ansible Vault cifra los datos secretos para que no queden en texto plano. Con las dos, un rol grande se prueba rápido y sin exponer claves.

Una librería online quiere actualizar solo las portadas de su web, y guardar el token de su pasarela de pago sin dejarlo a la vista.

Al final de esta lección

Nota

Puedo ejecutar solo una parte de un playbook y guardar un secreto cifrado.

Palabras clave

PalabraQué significaEjemplo
Etiquetauna marca en una tarea para elegirla al ejecutartags: [contenido]
always y neveretiquetas con un papel propio: siempre y solo si se pide
--limituna opción que reduce los hosts de la ejecución
Vaultla herramienta de Ansible que cifra archivos con una claveansible-vault
Archivo de claveun archivo con la clave del vault, guardado aparte

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una etiqueta elige qué tareas se ejecutan

Cada tarea puede llevar una o varias etiquetas. Con --tags contenido corren las tareas que tienen esa etiqueta. Con --skip-tags contenido corren todas menos esas.

La opción --list-tasks enseña qué tareas arrancarían, sin ejecutarlas. Las órdenes siguientes crean un playbook de cuatro tareas, y dos usan etiquetas especiales.

Crea una carpeta de trabajo

Comando
mkdir -p ~/etiquetas

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Entra en ella

Comando
cd ~/etiquetas

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe un playbook con etiquetas

Comando
printf -- '---\n- hosts: web\n  gather_facts: false\n  tasks:\n    - name: Crear la carpeta\n      ansible.builtin.file:\n        path: /tmp/iac-t-dir\n        state: directory\n        mode: "0755"\n      tags: [carpeta]\n    - name: Escribir la portada\n      ansible.builtin.copy:\n        content: "portada\\n"\n        dest: /tmp/iac-t-dir/portada.txt\n        mode: "0644"\n      tags: [contenido, web]\n    - name: Escribir el aviso\n      ansible.builtin.copy:\n        content: "aviso\\n"\n        dest: /tmp/iac-t-dir/aviso.txt\n        mode: "0644"\n      tags: [contenido]\n    - name: Comprobar el acceso\n      ansible.builtin.debug:\n        msg: comprobando\n      tags: [always]\n    - name: Limpiar la carpeta\n      ansible.builtin.file:\n        path: /tmp/iac-t-dir/aviso.txt\n        state: absent\n      tags: [never, limpieza]\n' > site.yml

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe un inventario con dos grupos

Comando
printf '[web]\nweb1 ansible_connection=local\n\n[reserva]\nreserva1 ansible_connection=local\n' > inventario.ini

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira qué tareas arrancaría una etiqueta

Comando
ansible-playbook -i inventario.ini site.yml --tags contenido --list-tasks

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Mira qué tareas arrancan al saltar una etiqueta

Comando
ansible-playbook -i inventario.ini site.yml --skip-tags contenido --list-tasks

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecuta de verdad solo una etiqueta

Comando
ansible-playbook -i inventario.ini site.yml --tags carpeta | grep -E "TASK|changed="

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo: qué tareas corren con cada opción

OpciónTareas que correnPor qué
NingunaCarpeta, portada, aviso y accesoLa etiqueta never las oculta salvo que se pida
--tags contenidoPortada, aviso y accesoDos llevan la etiqueta y acceso es always
--skip-tags contenidoCarpeta y accesoSe quitan las dos con esa etiqueta
--tags limpiezaAcceso y limpiarLimpiar solo corre si se pide su etiqueta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que --tags carpeta ejecuta solo la tarea de la carpeta. No es así. Las tareas con la etiqueta always corren también, y la ejecución de verdad lo muestra: salen dos tareas. Para saltarse una tarea always hay que pedirlo con --skip-tags always.

Limit reduce los hosts, pero no añade ninguno

La opción --limit reduce una ejecución a los hosts que nombras. Solo puede quitar: si el play usa el grupo web y limitas a un host del grupo reserva, no queda ninguno.

La orden siguiente muestra los hosts con --list-hosts: el play usa web y el límite nombra a reserva1, así que la lista sale vacía.

Limita a un host ajeno al play

Comando
ansible-playbook -i inventario.ini site.yml --limit reserva1 --list-hosts

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Vault cifra un archivo con una clave aparte

ansible-vault encrypt cifra un archivo con una clave. Aquí la clave es un archivo de texto, clave.txt, y el secreto es un token de prueba. Los dos son de práctica: nunca uses un secreto real en un laboratorio.

Un archivo cifrado empieza por una cabecera, $ANSIBLE_VAULT;1.1;AES256, y ya no contiene el texto original. En un proyecto real la clave no se guarda junto al archivo cifrado.

Escribe la clave de práctica

Comando
echo clave-de-practica > clave.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Escribe un secreto de prueba

Comando
printf 'api_token: token-de-prueba-4711\n' > secretos.yml

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cifra el archivo de secretos

Comando
ansible-vault encrypt secretos.yml --vault-password-file clave.txt

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee la primera línea del archivo

Comando
head -n 1 secretos.yml

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuenta las líneas con el token

Comando
grep -c "token-de-prueba" secretos.yml

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee el secreto con la clave

Comando
ansible-vault view secretos.yml --vault-password-file clave.txt

Se 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

Ejecuta ansible-playbook -i inventario.ini site.yml --skip-tags always --list-tasks. Di antes cuántas tareas saldrán: son las tres que no llevan always ni never.

Después abre el README del laboratorio con cat ~/README.md. La última parte te pide cifrar un archivo de tu propio rol. Su contenido no debe quedar en ningún otro sitio.

Sobre este laboratorio y su código: Laboratorio de roles de Ansible: un rol, handlers y Vault en una VM Ubuntu

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.