Ansible - Primera parte: Instalación

Ansible es un programa que permite la gestión y/o configuración de servidores y/o grupos de servidores de forma remota. En este modo es posible automatizar la mayoría de los procesos y al mismo tiempo tener un control centralizado de las distintas configuraciones. Existen otros programas que permiten este tipo de gestión, entre los cuales podemos citar Puppet y Chef. La gran ventaja de Ansible, es que relativamente fácil de utilizar/configurar, no se apoya en agentes que hay que instalar en los servidores que se quiere gestionar (clientes) ya que utiliza una conexión SSH para conectarse a los clientes.

Muchos se preguntarán. ¿Porque no debería seguir utilizando mi script? Porque centralizando la gestión y el control de uno o un grupo de servidores, tengo la posibilidad de realizar cambios que luego se podrán aplicar a todos los servidores sin tener que acceder a cada uno de ellos singularmente. Porque si el proceso que se encarga de la configuración de los servidores, encuentra un error en el proceso, lo parará. Una vez corregido el error y reiniciado el proceso, éste ejecutará solamente los pasos que todavía no se han procesado.

El programa y los módulos que lo acompaña se basan en el lenguaje de programación Python. En esta primera parte veremos como instalarlo y como ejecutar el primer comando. La instalación se basa en un VPS de Digital Ocean con CentOS 6.5 64 bit y 512Mb de RAM.

Accedemos al servidor vía SSH y actualizamos el sistema:

yum update -y

Instalamos el editor nano y wget:

yum install nano wget -y

Continuamos con la configuración de la zona horaria (personalizar según su país):

rm /etc/localtime
ln -s /usr/share/zoneinfo/America/Bogota /etc/localtime

El idioma (español):

nano /etc/sysconfig/i18n

modificamos esta línea:

LANG="en_US.UTF-8"

para que quede:

LANG="es_CO.iso88591"

Guardamos los cambios.

Instalamos el paquete del network time protocol que se utiliza para tener actualizada la hora del servidor:

yum install ntp -y

Lo configuramos para que arranque en automático:

chkconfig ntpd on

Lo iniciamos:

service ntpd start

Creamos la partición de Swap ya que no viene por defecto:

dd if=/dev/zero of=/swapfile bs=1024 count=512k
mkswap /swapfile
swapon /swapfile

Configuramos la partición de swap para que arranque con el sistema:

nano /etc/fstab

al final del archivo añadimos la línea que sigue:

/swapfile          swap            swap    defaults        0 0

Guardamos los cambios y se cambiamos los permisos del archivo recién creado:

chmod 0600 /swapfile

Reiniciamos el sistema:

reboot

Volvemos a acceder al VPS vía SSH y pasamos a la instalación del programa. Podemos utilizar dos formas:

  • desde las fuentes
  • desde el repositorio EPEL

Instalación desde las fuentes:

yum install gcc gcc-c++ -y

yum install git python-setuptools python-tools python-devel -y

cd /usr/src

git clone git://github.com/ansible/ansible.git
cd ansible
source hacking/env-setup
easy_install pip
pip install paramiko PyYAML jinja2 httplib2

Los servidores que queremos manejar se indican en el archivo hosts que Ansible buscará en la carpeta /etc/ansible. Como esa carpeta todavía no existe, la creamos:

mkdir /etc/ansible

Creamos el file hosts

nano /etc/ansible/hosts

donde añadimos solamente una línea:

localhost

Guardamos los cambios. De esta forma indicamos a Ansible que gestionaremos el VPS local. Miramos la versión de Ansible instalada:

ansible --version

ansible 1.6 (devel 92aacb198c) last updated 2014/03/04 01:38:57 (GMT -500)

Ejecutamos nuestro primer comando (un ping):

ansible all -m ping --ask-pass

La primera vez que ejecutamos un comando en un servidor cliente, habrá que añadir el servidor en la lista de host conocidos:

paramiko: The authenticity of host 'localhost' can't be established.
The ssh-rsa key fingerprint is 37ff3ec4c33465a07f50e764c4e33183.
Are you sure you want to continue connecting (yes/no)?

yes

El output del comando:

localhost | success >> {
    "changed": false,
    "ping": "pong"
}

 

Instalación desde los repositorios epel:

Seguramente esta segunda forma de instalar Ansible es mucho más sencilla. Instalamos el paquete de los repositorios EPEL:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Luego Ansible:

yum install ansible

Se instalarán también todas las dependencias necesarias. Miramos la versión del programa instalado:

ansible --version
ansible 1.4.3

Renombramos el archivo hosts que viene por defecto:

mv /etc/ansible/hosts /etc/ansible/hosts.old

Creamos uno nuevo:

nano /etc/ansible/hosts

Añadimos la misma línea vista en la instalación desde la fuentes.

localhost

Guardamos los cambios y ejecutamos el mismo comando:

ansible all -m ping --ask-pass

paramiko: The authenticity of host 'localhost' can't be established.
The ssh-rsa key fingerprint is 37ff3ec4c33465a07f50e764c4e33183.
Are you sure you want to continue connecting (yes/no)?

yes

localhost | success >> {
    "changed": false,
    "ping": "pong"
}

El resultado será el mismo. Próximamente la segunda parte.

Comentarios

Hola Andrea, excelente aportación..

Me quedan un par de dudas..

- Ansible es Gratis o tiene algún costo por licenciamiento?
- Hasta cuantos servidores pudiera administrar?
- Cuenta con la opción de guardar logs para después auditar los movimientos/cambios realizados?

Saludos,
Gustavo García

Hola Gustavo,

las respuestas:

1. Ansible es gratuito. La parte de pago es la GUI que simplifica la gestión de lo servidores (Ansible Tower)

2. En teoría no hay limite a los servidores.

3. Creo que si, pero no estoy seguro al 100%. Una cosa que si se es que si se cambia la configuración de un servidor desde Ansible y luego se ejecuta nuevamente, el programa solamente procesa los nuevos comandos.

No he tenido tiempo de seguir con el estudio por tiempo, pero es una tarea que tengo pendiente.

Saludos