Laboratorio de Ansible: configurar una máquina con un playbook, en el navegador

Este laboratorio da a cada alumno una máquina Ubuntu propia y un playbook de Ansible sin terminar. Lo termina para que instale un paquete, cree un archivo a partir de una plantilla con una variable y escriba un archivo de unidad de systemd, y lo ejecuta una segunda vez para comprobar que no cambia nada. No se instala nada en el ordenador del alumno, y un script califica el resultado, así que no tienes que leer cada máquina.

Qué aprenden los alumnos

Qué es un playbook: una lista de tareas en YAML, cada una con un módulo que hace un solo trabajo. Las variables, y una plantilla que rellena un archivo a partir de una de ellas. La diferencia entre describir el estado en que debe estar una máquina y escribir los comandos que la llevan allí. Sobre todo la idempotencia: un buen playbook ejecutado dos veces deja la máquina como la dejó la primera ejecución, y el resumen final dice changed=0.

La tarea

El laboratorio deja un proyecto en la carpeta personal: un inventario con esta única máquina en conexión local, un archivo de ajustes, una plantilla con una variable y un playbook al que le faltan tres trabajos. El trabajo 1 es un paquete, tree. El trabajo 2 es el archivo /etc/ansible-lab/welcome.txt, creado a partir de la plantilla, propiedad de root con permisos 0644. El trabajo 3 es el archivo de unidad /etc/systemd/system/lab-greeter.service, cuya descripción lleva la variable. El README dice qué hacer en cada uno y no da tareas, módulos ni respuestas. El alumno solo escribe el archivo: el servicio no se inicia.

Ejecútalo en tu navegador

Los laboratorios de máquina virtual se proponen como una tarea de laboratorio en un módulo, y el ejemplo está en la página del laboratorio. La máquina es pequeña: una CPU, 1 GB de memoria y 10 GB de disco.

  1. Añade el laboratorio. En un módulo que impartes, añade una tarea y elige la tarjeta «Laboratorio de máquina virtual Ubuntu». La página muestra una breve descripción de la máquina en lugar de un archivo compose.
  2. Parte del ejemplo. La página ofrece laboratorios de ejemplo para empezar. Elige Ansible basics. Usar un ejemplo sustituye el texto, y «Deshacer» recupera el tuyo.
  3. Publica e inicia tu propia copia. Publica y después pulsa «Iniciar». El script de preparación del laboratorio instala Ansible desde el archivo de Ubuntu y escribe el proyecto y el README la primera vez que se inicia la máquina virtual, en unos diez segundos.
  4. Abre el terminal. Abre su terminal y lee README.md en la carpeta personal: dice las tres tareas que hay que terminar en el playbook y no da ninguna respuesta.

Una lección básica en este laboratorio

Ansible Basics es una pequeña lección que se hace en este laboratorio, que es una máquina virtual Ubuntu: cada paso está explicado y tiene un botón Ejecutar que escribe su comando en el terminal de la máquina y muestra lo que imprimió. El alumno lista el proyecto, lee el playbook sin terminar, lo ejecuta y comprueba que no cambia nada, y pregunta a un módulo si la carpeta del laboratorio existe ya.

La lección solo mira alrededor y deja al alumno la tarea propia del laboratorio, terminar el playbook, así que no da ninguna respuesta. Es pequeña a propósito: muestra a un docente qué es una lección que se hace en un laboratorio, y el laboratorio hace el resto. Cópiala en un módulo tuyo para cambiarla.

Cómo se califica

El laboratorio tiene una comprobación. Se ejecuta sobre una copia de la máquina guardada tras un inicio limpio, así que solo ve lo que el alumno guardó. Lee el playbook y rechaza el que está hecho solo de tareas shell, command, raw o script, o que las esconde en un include o en un rol. Lee el paquete y los archivos guardados. Después ejecuta el playbook del alumno dos veces con un nombre de sitio que nadie ha visto: los archivos que crea deben llevarlo, cosa que no hace un archivo escrito a mano, y la segunda ejecución debe indicar changed=0, cosa que no hace una tarea que cambia algo cada vez. La primera línea de lo que imprimió la comprobación dice qué no está bien.

Lo que no puede impedir es un alumno decidido con derechos de administrador en su propia máquina, que podría manipular el propio Ansible. Es una comprobación para una clase, no una prueba.

  1. Asígnalo. Asigna el laboratorio como cualquier tarea, con una fecha de entrega si quieres. Cada alumno recibe una máquina virtual propia, que se conserva de una sesión a otra.
  2. Ejecuta la comprobación. En la fila de un alumno de la lista de la clase, pulsa «Ejecutar la comprobación». Inicia una copia de su máquina guardada, sin guardar nada de vuelta, ejecuta como root el script de comprobación del laboratorio y muestra si se superó, qué imprimió y cuándo. Al alumno no se le comunica el resultado.
  3. Califícalo. Lee la primera línea de lo que imprimió la comprobación: dice qué no está bien, por ejemplo un archivo que no lleva la variable o la tarea que cambió en la segunda ejecución. Devuelve el trabajo con un motivo si necesita más.

La definición en GitHub

El archivo es la definición completa del laboratorio, el mismo texto que ejecuta la plataforma: tamaño, script de preparación, README y comprobación. Cópialo y cambia el paquete, las rutas o los trabajos para hacer un laboratorio propio.

Preguntas frecuentes

¿La comprobación inicia el servicio?
No. Lee el archivo de unidad y nunca lo inicia: el laboratorio consiste en escribir el archivo con Ansible, y lo que se califica es el propietario, los permisos y el contenido del archivo.
¿Puede el laboratorio enseñar también Terraform?
No en este laboratorio. La máquina solo llega al archivo de Ubuntu, PyPI, npm y GitHub, y Terraform descarga sus proveedores de un registro al que la máquina no llega, así que solo se ofrece Ansible. Ansible se instala desde el archivo de Ubuntu al iniciar la máquina virtual.
¿Qué gestiona el playbook?
La propia máquina virtual, en conexión local, ya que cada alumno tiene una sola máquina. Funcionan los comandos reales: ansible-playbook, ansible-doc y --check para una prueba en seco.