Clase 2: Ansible. Ejecución de Playbooks
¿Qué vas a aprender en esta clase?
- Conocer los ficheros fundamentales en la configuración de ansible.
- Trabajar con la estructura de un playbook.
- Trabajar con variables.
- Aprender algunos módulos de ansible.
- Ejecutar un playbook ansible.
Teoria
- Jugada (play): Declaración en yaml de una acción (se utiliza un módulo) que quiero conseguir. Ejemplo: Quiero que en la máquina este instalado un paquete de una versión determinada.
- Libro de jugadas (playbooks): Conjuntos de jugadas (plays), para conseguir una configuración compleja de la máquina.
- Variables: Los plays, normalmente, están parametrizados. Se utilizan variables para concretar la configuración en cada caso. Ansible puede trabajar con variables que obtiene de distinta manera:
- A nivel de nodo: definimos variables para cada nodo en el inventario, por ejemplo:
ansible_ssh_host,ansible_ssh_user, … - A nivel de grupo de nodos: Hemos creado un directorio que se tiene que llamar
group_vars, dentro de este directorio podemos crear ficheros con las variables que creamos a nivel del grupo. Dentro de este directorio suele haber un ficheroalldonde se definen las variables que se pueden utilizar al configurar todos los nodos. Si en el inventario tuviéramos un grupo llamadoservidores, dentro de este directorio podríamos crear un fichero con el mismo nombre, y en él declararíamos las variables que podemos usar al configurar los nodos del gruposervidores. Para simplificar, solemos usar el ficheroall. - Gathering Facts: Variables que obtiene ansible de los nodos que está configurando. La primera tarea que ejecuta el play es obtener información del nodo que va a configurar. Toda esa información se puede usar al definir las tareas, por ejemplo:
ansible_hostname,ansible_distribution,… Para ver esa información podemos ejecutar:ansible nodo1 -m setup.
- A nivel de nodo: definimos variables para cada nodo en el inventario, por ejemplo:
Recursos
Ejercicio
-
Haz un fork del repositorio taller_ansible_vagrant y realiza una clonación en el ordenador donde has instalado ansible. Vamos a trabajar en el directorio Taller1.
-
Rellena de manera adecuada el inventario y la configuración de ansible.
-
Contesta estas preguntas: ¿Qué variables están definidas a nivel de nodo?. ¿Qué variables están definidas a a nivel de grupos de nodos?, ¿qué fichero has consultado?.
-
Ejecuta el método necesario para obtener las variables del nodo (Gathering Facts).
-
Veamos el playbook que se encuentra en el fichero
site.yml:- Primera línea:
hosts: all. Significa que las tareas se van a ejecutar en todos los nodos definidos en el inventario. Podríamos haber puestohosts: servidoresuhosts: nodo1. become: true: En las tareas que necesiten ejecutarse como administrador se utilizarásudo.tasks: Lista de tareas. Todas las tareas tienen un mensaje en el parámetronamey el uso de un módulo.
- Primera línea:
-
Ejecuta el playbook:
ansible-playbook site.yaml- Si tienes errores, repasa las modificaciones que has realizado para corregirlos.
- Cuando funcione la ejecución de la receta, cambia el fichero
foo.txty ejecuta de nuevo la receta. ¿Se ejecutan todas las tareas? - ¿Cómo se llama la propiedad que permite que las tareas que ya se han realizado no se vuelvan a ejecutar?
- Comprobación del funcionamiento: Comprueba que se ha copiado un fichero
foo.txten el servidor, accede desde un navegador al servidor y comprueba que aparece el ficheroindex.htmlque hemos creado.
Veamos las tareas que están definidas:
- Actualizamos el sistema: Se utiliza el módulo apt para actualizar los paquetes del sistema.
- Instalar paquetes con apt: Busca en la documentación del módulo apt y termina la segunda tarea para hacer la instalación del paquete
gityapache2. - Copiar fichero a la máquina remota: El módulo copy nos permite copiar ficheros desde el equipo donde tenemos ansible instalado hasta la máquina que estamos configurando. Los ficheros se suelen guardar en un directorio llamado
files. Modifica la tarea para guardar el ficherofoo.txtal directorio/etcde la máquina remota. - Copiar un template a un fichero de la máquina remota: El módulo template nos permite copiar una plantilla jinja2 (que normalmente tenemos en un directorio llamado
template) a la máquina remota después de cambiar las variables por los valores adecuados.- Modifica la plantilla
index.j2para indicar los nombres correctos de las variables. Tienes que cambiar las variablesmodifica_el_nombrepor el nombre correcto de las variables. - Modifica la tarea para guardar el template en el directorio
/var/www/html/index.htmlde la máquina que estamos configurando.
- Modifica la plantilla
¿Qué tienes que entregar?
- Entrega los ficheros:
site.yaml,hostsytemplate/index.j2. - Entrega una captura de pantalla donde se vea que se ha finalizado la ejecución del playbook.
- Vuelve a ejecutar el playbook, ¿se ejecutan todas las tareas?. ¿Cómo se llama la propiedad que permite que las tareas que ya se han realizado no se vuelvan a ejecutar?
- Comprueba que el fichero
foo.confse ha copiado al servidor configurado. Modifica o barra el fichero en el servidor y vuelve a ejecutar el playbook. ¿Qué ocurre? - Captura de pantalla donde se vea el acceso desde el navegador al servidor web, y se vea el contenido del fichero
index.html. - Entrega la URL de tu repositorio con el que estás trabajando.