Deiser Blog | Atlassian | ITSM | DevOps | Agile at Scale | Cloud

Primeros pasos con Ansible

Escrito por Carlos Aparicio | 13-ene-2015 9:40:00

¿Qué es Ansible?

Ansible es una herramienta que nos permite gestionar configuraciones, aprovisionamiento de recursos, despliegue automático de aplicaciones y muchas otras tareas de TI de una forma limpia y sencilla.

¿En qué se diferencia de otras herramientas similares?

  •    No necesita agentes.
  •    No requiere de configuraciones engorrosas y complicadas.
  •    Flexibilidad (API, módulos, plugins).
  •    Facilidad de uso.

¿Quiénes usan Ansible actualmente?

Por su simplicidad Ansible es utilizado por muchísimas empresas. Entre ellas:

Instalar Ansible

La instalación es bastante simple, una vez instalado no encontrarás base de datos o algún demonio que monitorizar o inicializar.

Sólo es necesario instalarlo en una máquina, que actuará como punto central de la aplicación. Cabe destacar que Ansible no necesita software o herramientas en los nodos donde se ejecute, por lo que el mantenimiento y actualización de la versión es muy sencilla.


¿Qué vamos a necesitar?

Para poder avanzar, es necesario disponer de 2 máquinas virtuales.Para efectos de esta guía usaremos Ubuntu como sistema operativo en ambos equipos.

  •    Máquina central: con IP 192.168.101.103
  •    Nodo: con IP 192.168.101.104


Máquina central (192.168.101.103)

Los requerimientos son los siguientes:

  •    Python 2.6+
  •    Sistema operativo: Red Hat, Debian, CentOS, OS X. Windows no soportado para la máquina central.


Nodo (192.168.101.104)

Los requerimientos son los siguientes:

  • Python 2.5+

Si la versión de Python es inferior, será necesario disponer de python-simplejson

Para la instalación de la máquina central se deben seguir los siguientes pasos:


YUM

Existen RPM's disponibles para EPEL 6 y 7 


APT-Ubuntu


Debian


PKG


Homebrew

 

Primer comando

Ya hemos instalado Ansible en nuestra distribución favorita, ahora vamos ejecutar nuestro primer comando desde la máquina central.

Lo primero que necesitamos es crear/modificar el fichero /etc/ansible/hosts donde vamos a indicar los distintos nodos sobre los cuales vamos a realizar las tareas automáticas. En nuestro caso, vamos a indicar el nodo que tenemos disponible para las pruebas:

Una buena descripción sobre la configuración de nuestro fichero hosts se puede encontrar aquí.

Ahora debemos asegurarnos de disponer de una autenticación por llave SSH con el nodo. Para ello abrimos una consola en la máquina central y ejecutamos el comando:

Una vez finalizado el proceso de generación disponemos de 2 ficheros: ~/.ssh/id_rsa ~/.ssh/id_rsa.pub . Copiamos la llave pública al nodo:


Ahora podemos iniciar una sesión SSH con el usuario root al nodo sin necesidad de una contraseña.
Ya disponemos de todo lo necesario para ejecutar nuestro primer comando desde la máquina central.

Si todo ha ido bien, deberíamos poder obtener un mensaje similar a:

Si ejecutamos el mismo comando quitando el parámetro -u root nos encontraríamos con el error:

Debido a que la conexión la hemos establecido para el usuario root y en caso de no especificar usuarios, Ansible va a utilizar el usuario actual.


Playbook

Los playbooks básicamente nos permiten gestionar la configuración del despliegue que vamos a realizar en los nodos. En ellos describimos la configuración, pero también nos permiten orquestar una serie de pasos o tareas a seguir.

El Playbook se escribe utilizando YAML. Por ejemplo:

Veamos la composición del ejemplo:

Hosts and User

Para cada tarea se puede especificar el grupo de nodos objetivo y el usuario remoto que ejecutará cada operación.

Para cada tarea se puede especificar el grupo de nodos objetivo y el usuario remoto que ejecutará cada operación.

En caso de requerir distintos usuarios por tarea se puede especificar de la siguiente forma:

'sudo' está soportado

 

Tasks

Las tareas son ejecutadas en orden, una a la vez, contra los nodos descritos en la sección hosts. Es importante destacar que si algún nodo falla en la ejecución de la tarea, este será sacado de la lista.

El objetivo de cada tarea es ejecutar un módulo. Los módulos sólo se ejecutarán cuando tengan algo que modificar. Si ejecutamos el Playbook una y otra vez, podemos estar seguros de que sólo cuando haya algo que modificar el módulo será ejecutado.

Los módulos command y shell sí serán ejecutados continuamente. Afortunadamente contamos con un check llamado creates que indicará que sólo debe ejecutarse si hay algo que modificar en la tarea.

Cada tarea debe contar con un 'name'que será incluido en la traza de salida de la operación. Por ejemplo:

'notify' son las acciones que se ejecutarán al final de cada tarea en el Playbook. Sólo serán ejecutadas una vez, incluso cuando sean llamadas por diferentes tareas. Por ejemplo: muchas tareas pueden solicitar el reinicio de algún servicio específico, pero este sólo será reiniciado una sola vez.


Ejecución de un Playbook

Para ejecutar un Playbook desde la máquina central ejecutamos el comando:

 

Demo

Para la demo vamos a crear un Playbook llamado webserver.yml, con el que vamos a instalar las herramientas necesarias para publicar una página web. Lo primero que hacemos es crear nuestro Playbook en la máquina central con el siguiente contenido:

Básicamente indicamos que la primera tarea a ejecutarse es la instalación de las aplicaciones necesarias: php5, apache2, mysql, etc...

En la segunda tarea vamos a ejecutar un comando que habilita el módulo rewrite de nuestro Apache.

Por último reiniciamos el servicio del Apache.

El Playbook se va a ejecutar en todos los nodos que pertenezcan al grupo webservice declarado previamente en el fichero /etc/ansible/hosts. En nuestro caso es el nodo con la IP 192.168.101.104.

Vamos a ejecutar el Playbook utilizando el comando:

Una vez finalizado obtendremos un mensaje similar a:

Podemos observar cómo al final se describe el resultado de la operación. Ok=4 y failed=0. Esto indica que todo se ha realizado sin ningún problema.

Así concluye esta pequeña guía sobre los primeros pasos con Ansible.

¿Qué te ha parecido? Espero que te haya servido para aclarar dudas y conceptos básicos sobre la herramienta.