playbook con ansible

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

 

Deja un comentario