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:
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:
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.