Primeros pasos con Ansible
Ansible es una herramienta pensada para el aprovisionamiento de recursos, instalación automática de aplicaciones, gestión de configuraciones y otras tareas vinculadas con los procesos que desarrolla TI. Su principal ventaja es que no necesita agentes y dispone de gran cantidad de módulos y plugins, además de disponer de una API. La comunicación con los agentes se realiza a través de SSH.
Se instala en un servidor que actuará como punto central de la aplicación, la herramienta no configura ninguna base de datos o demonio en el sistema, al estar escrita en Python sólo requiere tenerlo instalado tanto en el punto central como en los nodos.
Sus principales ventajas son:
- No necesita agentes en los clientes
- Sintaxis simple y curva de aprendizaje rápida
- Seguro y de fácil manejo
- Rendimiento
- No requiere conocimientos de programación
Instalación
Para la instalación en CentOS/Redhat 8 primero instalaremos el repositorio EPL:
# dnf –y install epel-release
Y luego procederemos a instalar ansible:
# dnf –y install ansible
Finalmente comprobaremos la versión instalada:
# ansible –version
Para la instalación en Debian 10 lo primero será actualizar la lista de paquetes
# apt-get update
Y posteriormente instalaremos ansible:
# apt install ansible
Finalmente comprobaremos la versión instalada:
# ansible –version
Fichero de inventario
El fichero de inventario contiene una lista de los host clientes agrupados en grupos (colecciónes). El fichero se ubica en /etc/ansible/hosts.
Por ejemplo, agregaremos un cliente con la IP 10.0.2.5 bajo la colección “web” :
Compartición de claves ssh
Como la interacción con los clientes se realiza a través de ssh, el primer paso después de la instalación es que en el servidor se creen el par de claves RSA, para que la clave pública se comparta con los clientes.
#ssh-keygen
Una vez creada la clave pública se copiará al cliente:
# ssh-copy-id root@10.0.2.5
Ejemplos de uso básico
Uno de los primeros pasos una vez configurado el cliente y el servidor será comprobar que la comunicación entre servidor y clientes se realiza correctamente. La mejor forma es utilizar el módulo llamado “ping”. El formato de uso de ansible es el siguiente
Ejecutaremos el módulo ping sobre el cliente 10.0.2.5:
# ansible 10.0.2.5 –m ping
Ejemplo de instalación de paquetes
En la ejecución de algunos módulos podemos introducir comandos como si estuviésemos en el cliente utilizando la opción “-a”, un ejemplo de módulo es “shell”:
# ansible web –m shell –a “apt install apache2 –y”
En la caso de utilizar sudo en añadiríamos el parámetro “–become”.
Ejemplo de copiado de ficheros
En este ejemplo copiaremos un fichero del servidor a todos los clientes dentro del grupo “web”
# ansible web –m copy –a “src=/tmp/pp.xt dest=/tmp”
Plantillas (playbooks)
Las platillas son ficheros de tipo YALM que tienen definidas un conjunto de tareas a realizar en uno o varios clientes.
Ejemplo de una plantilla básica (prueba.yml):
---
- hosts: web
tasks:
- name: run echo command
command: /bin/echo Prueba
En esta plantilla básica podemos ver los siguientes campos:
- hosts: Nombre del cliente o grupo al que van destinadas las operaciones.
- tasks: Sección de tareas a realizar.
- name: Nombre identificativo de la tarea
- command: Ejecución de un comando en el cliente.
La forma de ejecutar los playbook:
# ansible-playbook prueba.yml
En el siguiente ejemplo se muestra la instalación del servidor apache en un cliente:
---
- hosts: apache
sudo: yes
tasks:
- name: install apache2
apt: name=apache2 update_cache=yes state=latest
- name: enabled mod_rewrite
apache2_module: name=rewrite state=present
notify:
- restart apache2
handlers:
- name: restart apache2
service: name=apache2 state=restarted