Primeros pasos con Ansible

Carlos Aparicio
13-ene-2015 10: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 

sudo yum install ansible-1


APT-Ubuntu

APT-Ubuntu sudo install ansible


Debian

Debian install PyYaml jinja2 paramiko


PKG

sudo pkg install ansible


Homebrew

Hombebrew brew install ansible

 

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:webserver addresss

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:ssh-keygen

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:llave pública


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.ansible all root

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

Si ejecutamos el mismo comando quitando el parámetro -u root nos encontraríamos con el error:mensaje SSH unkown 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:hosts tasks handlers

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.hosts webservers remote_user root

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

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

'sudo' está soportadosudo yes

 

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:task name make sure apache is running

'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.notify restart apache


Ejecución de un Playbook

Para ejecutar un Playbook desde la máquina central ejecutamos el comando:ansible-playbook playbook yml

 

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:instalacion de paquetes php5 apache2 mysql server client

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:ansible-playbook webserver yml

Una vez finalizado obtendremos un mensaje similar a:play webserver gathering facts

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.

Haz upgrade de versión de Jira

Guía de actualizaciones de Jira

¿Estás pensando actualizar tu instancia de Jira? ¿Has tenido en cuenta todas las posibles complicaciones? ¿Tienes miedo de no poder hacer la actualización de una vez?

Descárgate esta guía y planifica tu proyecto:

DESCARGAR GUÍA

Comments (4)

Subscribe by Email