Despliegue de servidores Vagrant con Ansible
Esta entrada es un fragmento de la entrada Instalar ownCloud en un servidor dedicado (IaaS), en la que se requiere Ansible para el despliegue de ownCloud en dos servidores, uno con Apache y PHP y otro con la base de datos sobre MySQL.
Despliegue de máquinas Vagrant con Ansible en Debian Jessie
Ansible es una herramienta desarrollada en Python para la automatización de tareas: despliegues, configuración y actualización de máquinas. Existen otras alternativas con nombres como Puppet, Chef o Salt.
Instalación de Ansible en un virtualenv
La instalación de la última versión de Ansible la hacemos con pip sobre un entorno virtual. Para ello instalamos virtualenv con apt-get install virtualenv
y creamos un directorio donde almacenar nuestros entornos virtuales.
Creamos un nuevo entorno virtual con la ejecución de virtualenv virtualenv/ansible
y activamos source virtualenv/ansible/bin/activate
. Ahora es cuando ejecutamos la instalación de Ansible y python-dev con pip install ansible python-dev
. Tras ello salimos del entorno virtual con deactivate
.
También es posible instalarlo desde su repositorio GitHub, siendo esta la última versión (v2.0.0 vs v1.9.4).
Configuración inicial de Ansible
La configuración de la receta de Ansible la hacemos a raíz de una plantilla ya creada. Por ello clonamos con git clone https://github.com/josedom24/automatizacion_iaw.git
la que facilita el profesor.
Editamos el fichero hosts, donde se ubica la configuración para el acceso a las máquinas. En él indicamos la dirección IP y usuario para el acceso mediante SSH.
1 2 3 4 |
[Servidores_Web] SWeb ansible_ssh_host=172.22.9.115 ansible_ssh_user=vagrant [Servidores_BBDD] SBBDD ansible_ssh_host=172.22.9.142 ansible_ssh_user=vagrant |
El siguiente paso es añadir nuestra clave pública al fichero authorized_keys de cada máquina Vagrant, para ello antes debemos copiarla con scp /home/nano/.ssh/nombre.key.pub vagrant@172.22.9.115:
y, dentro de la máquina Vagrant, añadirlo con al fichero ~/.ssh/authorized_keys con cat nombre.key.pub >> ~/.ssh/authorized_keys
En el fichero ansible.cfg establecemos la configuración de Ansible, como es el fichero del que debe cargar, el usuario remoto y la clave privada utilizada para conectar a esos hosts.
1 2 3 4 |
[defaults] hostfile = hosts remote_user = vagrant private_key_file = ~/.ssh/nombre.key |
A continuación, debemos de activar el entorno virtual creado para la instalación de la versión más reciente de Ansible. El comando a ejecutar, en mi caso, es: source ~/virtualenv/ansible/bin/activate
. Recuerda que puedes salir de un virtualenv con deactivate
La ejecución del comando ansible -m ping all
ejecutará un ping a todos los hosts, mientras que ansible -m ping SBBDD
solo al servidor que aloja la base de datos.
La instrucción de Ansible deberá ser ejecutada en el directorio donde se ubican los ficheros de configuración de Ansible.
Configuración de una receta en Ansible
Un playbook es un fichero de texto escrito en YAML donde se indica los comandos a ejecutar en los hosts y a qué grupo afecta, así como otros parámetros.
En la receta clonada tenemos, por ejemplo, el playbook main.yml que a su vez hace referencia a otros tres playbooks más.
1 2 3 |
- include: playbooks/commons/main.yaml - include: playbooks/apache2/main.yaml - include: playbooks/mysql/main.yaml |
Para ver un ejemplo más completo podemos ver el fichero automatizacion_IAW/playbooks/apaceh2/main.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--- - hosts: Servidores_Web sudo: yes tasks: - name: install apache2+php5 apt: name={{ item }} state=latest with_items: - apache2 - php5 - php5-mysql notify: - restart apache2 - name: copy index.html template: src=templates/index.j2 dest=/var/www/html/index.html owner=www-data group=www-data mode=0644 handlers: - name: restart apache2 service: name=apache2 state=restarted |
Por ello, solo debemos ejecutar el main.yml ubicado en automatizacion_IAW para que se ejecuten las recetas de apache2, mysql y commons. Esto lo realizamos con la ejecución del comando ansible-playbook main.yml
Accediendo a la dirección IP del definido como servidor web observaremos el texto «Curso de Openstack» y el nombre de nuestro host.
Más información sobre la configuración y uso de Ansible: Introducción a Ansible
1 respuesta
[…] la entrada Despliegue de servidores Vagrant con Ansible para ver el proceso de despliegue de estos dos servidores utilizando […]