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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.