Continuamos con ansible, esta vez vamos con los playbook, que es una lista que contiene tareas específicas, para realizar en un listado de servidores. Además incluye configuraciones y variables entre otros elementos.
El formato utilizado es yaml.
Ejemplo:
Suelen empezar con —
– name: nombre del playbook
host: all (ojo siempre al mismo nivel que la línea de name)
remote_user: usuario
tasks:
-name: copiar un fichero (ojo con la sangría)
Copy: src= /home/usuario/fichero.txt dest=/home/usuario/fichero.txt
Ese fichero debemos guardarlo como .yml
Y para ejecutarlo:
Ansible-playbook [–i inventario] [opciones] playbook.yml
Filtrados de servidores
Como hacemos en los otros casos, con los playbook podemos seleccionar grupos de servidores o servidores específicos, siempre debemos sepáralos con :, pero también podemos usar &, que indica que el servidor debe estar en los grupos especificados, o ! que tendrá que estar en un grupo pero no en todos.
Ejemplo:
Hosts: servidores
Así es como lo hemos usado hasta ahora
Hosts: servidores:& locales
Este lo aplica los servidores que además estén en el grupo locales, es decir si tenemos 2 servidores en el grupo servidores llamados server 1 y server2 y en el grupo locales tenemos local1 y server2 solo se aplicaría al server2 ya que coincide con en los 2 grupos. Esto es muy útil para sistemas de alta disponibilidad que están separados por provincias o países.
Hosts:servidores:!locales
Volviendo al ejemplo anterior, imaginaros que ya hemos actualizado al grupo locales y ahora queremos actualizar los que no son del grupo locales. Esta aplicaría nuestro playbook a los servidores que no están en locales.
Si nos fijamos en el ejemplo a arriba seria server1
Hosts:servidores:locales
En caso que queramos a aplicarlo a varios grupos, así sería la aplicación de comando, esto aplicaría nuestro playbook a los dos grupos servidores y locales.
Ejemplo de filtrado
Os pongo ejemplos para tenerlo mas claro, he creado un inventario llamado servidores que contiene varios grupos de servidores, separados por cpd, y a su vez hay servidores de los dos grupos separados por aplicación que podamos ver bien el filtrado.
ansible-playbook -i inventario/ ping_win.yml –list-hosts
Esto nos muestra el listado de servidores que se va a aplicar el yml porque hemos usado la opción all
Ahora bien, vamos a filtrar para que solo se lance el playbook en el grupo cpd1.
ansible-playbook –limit ‘cpd1’ -i inventario/ ping_win.yml –list-hosts
Que necesitamos lanzarlo solo en 2 grupos. Entonces ejecutamos lo siguiente:
ansible-playbook –limit ‘cpd1:sql’ -i inventario/ ping_win.yml –list-hosts
Con esto, trabajaremos con los servidores que están en cdp1 y en el grupo de sql
En caso que solo queramos trabajar con los servidores que estén en cdp1 y además en grupo sql debemos usar &
ansible-playbook –limit ‘cpd1:&sql’ -i inventario/ ping_win.yml –list-hosts
Que necesitamos hacerlo al contrario es decir que nos muestro todo lo que sea del grupo cpd1 y que no esté en sql usaríamos el !
ansible-playbook –limit ‘cpd1:!sql’ -i inventario/ ping_win.yml –list-hosts
Como vemos es un potente sistema de filtrado.
Elementos básicos
Una vez visto el filtrado vamos a centrarnos en otros elementos importantes para un playbook, que serían:
remote_user: xxxxx (para especificar el usuario que va a conectarse)
become: True/False o 1/0 (para usar sudo)
become_user: usuario (para ejecutarlo con un usuario específico, por ejemplo un usuario para una instalación)
become_method: sudo/su/pbrun/ksu (el método que vamos a usar para cambiar de usuario)
check_mode= True/False (hace la comprobación de que podamos ejecutar la tarea)
Opciones de plybooks
-i Para elegir nuestro inventario. Podemos indicar un fichero, un script o un directorio
–syntax-check para comprobar que la sintaxis de nuestro playbook esta correcta.
En este caso nos diría que está correcto.
Si tenemos algún fallo de sintaxis nos mostraría:
Nos indica que no hay espacio correcto en la línea 3 de nuestro .yml
–list-tasks esto nos listaría nuestras tareas.
–step nos preguntara para continuar cuando termina nuestras tareas y comenzar la otra
–start-at-task=“tarea” especificamos la tarea con la que empezar
–forks= n/ -f n limita las tareas en paralelo para darle menos o más por defecto son 5
-v (vvvv) el verbose para mostrar más información (comando que ejecuta, etc…..)
Voy a dejarlo aquí.
Los playbook en ansible son muy importantes y extensos, ya que suele ser lo que mas se va a usar en un entorno de producción.
Seguiré ampliando más esta parte en los próximos días.
Espero que os sirva