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

ansible

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

ansible

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

ansible

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