Tu primer playbook de Ansible
Ansible es una de las herramientas más poderosas para la automatización de la administración de máquinas, permitiendo especificar mediante un lenguaje declarativo el estado requerido para las máquinas gestionadas.
Si no conoces todavía Ansible, antes de la lectura de este artículo te recomendamos echar un vistazo al post Qué es Ansible. En este caso partimos de un servidor de control configurado y un servidor al que nos vamos a conectar, para administrarlo remotamente. Si no sabes completar estas configuraciones, están explicadas en el artículo Primeros pasos con Ansible.
Qué es un playbook de Ansible
En Ansible se llaman «Playbooks» a los archivos de texto que describen de manera declarativa el estado necesario a aplicar en los servidores administrados. Estos archivos se escriben en un lenguaje de texto plano y se usarán desde el ordenador que hace las veces de nodo de control. Queda para Ansible la elección de los módulos que sean necesarios para producir los efectos requeridos.
Como puedes imaginar, se usan los playbooks para administrar las configuraciones de los servidores, incluso el despliegue de servidores remotos y sus aplicaciones. Son extremadamente potentes, permitiendo especificar todo tipo de configuraciones que envuelvan a uno o más servidores, balanceadores de carga, etc. En este repositorio de GitHub encontramos diversos ejemplos de Ansible, que nos aportarán un abanico grande de posibilidades para entender qué son los playbooks y apreciar una muestra de las enormes posibilidades de la herramienta.
El lenguaje con el que se expresan los playbooks es Yaml, que para quien no lo conozca vendría a ser algo parecido a un JSON. No se trata por tanto de un lenguaje de programación, sino más bien un lenguaje de declaración de datos.
Construyendo un playbook en Ansible
Vamos a comenzar nuestro primer playbook en Ansible. Para ello vamos a trabajar dentro de nuestro nodo de control, creando el archivo de texto en una ruta del sistema. En principio puedes colocar los playbooks en cualquier carpeta del ordenador de control. Usaremos un archivo con extensión .yml, por ejemplo primer-playbook.yml, que tendrá un código como el siguiente:
--- # Primer ejemplo de Playbook en Ansible - hosts: all tasks: - name: Hacer ping ping:
En este ejemplo hemos creado un simple ping a todos los servidores configurados dentro del archivo /etc/ansible/hosts.
- Toda línea que comienza con # es un comentario.
- La declaración «hosts: all» indica que queremos hacer el proceso contra todos los servidores incluidos en el archivo de hosts.
- A continuación definimos la tarea en sí que se va a ejecutar, pudiendo encadenar varias tareas a realizar en un mismo playbook. Con el código anterior estamos aportando un nombre a la tarea e indicando que consiste en ejecutar realizar el ping.
Ejecutar un playbook
Para ejecutar un playbook de Ansible tenemos que escribir el comando «ansible-playbook» seguido de la ruta o nombre de archivo .yml donde está el código a ejecutar. Por ejemplo:
ansible-playbook primer-playbook.yml
Al correrse el playbook anterior recibiremos una salida por consola como la que tenemos a continuación. PLAY [all] ************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************** ok: [0.0.0.0] ok: [0.0.0.1] TASK [Hacer ping] ******************************************************************************************************* ok: [0.0.0.0] ok: [0.0.0.1] PLAY RECAP ************************************************************************************************************** 0.0.0.0 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 0.0.0.1 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Especificar qué servidores queremos involucrar en un playbook
Dentro del archivo de hosts que tenemos en la ruta /etc/ansible/hosts podemos indicar un listado variable de máquinas sobre las que queremos realizar la administración remota. Sin embargo, no siempre todos los playbooks se desean ejecutar sobre todas las máquinas listadas en tal archivo. Es por ello que existe la posibilidad de crear grupos de máquinas en el archivo «hosts», por ejemplo, servidores web, servidor de base de datos, etc. Para ello simplemente indicamos entre corchetes el nombre del grupo de servidores, de este modo.
0.0.0.0 ansible_ssh_private_key_file=~/.ssh/admin [dbservers] 0.0.0.1 ansible_ssh_private_key_file=~/.ssh/admin
En este caso tenemos un servidor sin grupo asignado y otro servidor en el grupo «dbservers». Ahora, si un playbook solamente debe afectar a un grupo en concreto, puedes indicarlo en la propiedad «hosts» del archivo del playbook de Ansible.
- hosts: dbservers
Conclusión
Hemos aprendido a crear un primer playbook con Ansible, en este caso algo tan sencillo como hacer un ping al servidor. Hemos podido ver cómo se ejecuta la misma acción sobre diversos servidores que podemos tener en el archivo de hosts de Ansible. Luego hemos aprendido a configurar una acción para un grupo de servidores concreto, dentro de los administrados por este nodo de control.
En el siguiente artículo aprenderemos qué son los roles de Ansible, en los que podemos encontrar tareas mucho más complejas a realizar sobre los servidores, con contribuciones de la comunidad para realizar todo tipo de acciones de administración.