ICM / how-to-do / Cómo hacer tus propios roles de Ansible

Cómo hacer tus propios roles de Ansible

16 octubre 2021 | Miguel Díaz

En esta entrada y próxima, explicaremos cómo funciona Ansible, cómo instalarlo y crear tus propios roles.

Qué es ansible

Ansible es un orquestador Open Source, un software que se encarga de automatizar la configuración, coordinación y control de sistemas.

Gestiona los nodos a través de SSH y Python. Un sistema controlador contiene Ansible y todos los archivos, configuraciones y tareas que se aplican a las máquinas nodo. De esta forma, permite centralizar la automatización y facilita la administración de grupos de sistemas.

Instalación de Ansible

Para instalar y usar Ansible nos harán falta un mínimo de dos máquinas. Un Control Node, en dónde se hará la instalación de Ansible, y otra máquina controlada por Ansible.

En este caso, usaremos dos Ubuntu Server 20 con estas características:

 

Nombre Hostname IP
cnode cnode.test.com 192.168.1.36
host1 host1.test.com 192.168.1.37

Empezamos la instalación en ‘cnode’ ejecutando estos comandos:

sudo apt-add-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible

Generamos un par de llaves y las copiamos a ‘host1’, para poder ejecutar la conexión por SSH:

ssh-keygen
ssh-copy-id 192.168.1.37

Ahora creamos un archivo /etc/ansible/hosts, en el que se almacenan los grupos y máquinas que Ansible controla. En este caso, tendrá este contenido:

[test]
host1.test.com ansible_host=192.168.1.37 

Podemos probar que la conexión es correcta a través de Ansible:

ansible all -m ping

Debería dar un resultado similar a este:

roles ansible

Playbooks

Los Playbooks son archivos que contienen toda la información para ejecutar tareas de forma reusable. Por ejemplo, un Playbook puede contener las instrucciones para instalar un servicio, sus prerrequisitos y aplicar una configuración deseada.

Son el bloque básico para hacer operaciones en Ansible, más allá de enviar comandos ad-hoc. Además, nos dan bastante flexibilidad, sobre todo en proyectos más sencillos. A continuación, vamos a probar un Playbook con las máquinas que hemos preparado:


– name: Install and configure apache server
hosts: test
tasks:
   – name: Install latest apache2
       apt:
        name: apache2
        state: latest
  – name: Apply apache2 configuration template
     template:
       src: /DATA/files/apache2conf/apache2.conf
      dest: /etc/apache2/apache2.conf
 – name: Restart apache2
   service:
      name: apache2
      state: restarted

Aquí usamos varias herramientas de Ansible, los módulos apt, template, y service. Cada módulo toma diferentes parámetros para las tareas que se ejecutarán en los sistemas que indicamos. En este caso, los hosts del grupo ‘test’, y por ende, la máquina host1.test.com. Este playbook instala Apache2, copia un archivo de configuración del Control Node y reinicia el servicio. Probamos de ejecutarlo:

ansible-playbook testPlaybook.yml

Este es el resultado que obtenemos:

roles ansible

Ansible nos indica con el color verde las tareas que se han realizado sin cambios, en amarillo las que han provocado cambios en el servidor y en rojo las que han dado error. En este caso, el archivo de configuración no era válido y no se ha podido reiniciar el servicio de Apache. Si volvemos a lanzar el Playbook con un archivo correcto pasa lo siguiente:

Esta vez no ha habido cambios en la tarea de instalación, ya que Apache2 ya está presente, y con el archivo de configuración correcto se ha podido reiniciar sin errores.

Conclusión

Una de las ventajas que nos ofrece Ansible es usar estos archivos de nuevo, para hacer cambios o solventar fallos anteriores, como hemos visto en esta entrada. La gran cantidad de módulos y flexibilidad de Ansible nos permite hacer tareas mucho más complicadas, que serían muy pesadas de hacer manualmente de forma repetida.

El siguiente paso en la administración de Ansible es solventar el problema de organizar los archivos que aparecen al escalar el número de máquinas a controlar. Esto supone aumentar la cantidad de playbooks, archivos de configuración, templates, etc.

La herramienta para hacer la organización más fácil en Ansible son los roles, que veremos cómo crearlos y usarlos en el siguiente artículo.