Introducción a Ansible
Warning: This information may be outdated. Please note the date of the post.
Conceptos
Ansible es un software que automatiza el aprovisionamiento de software, la gestión de configuraciones y el depliegue de aplicaciones. Está categorizado como una herramienta de orquestación. Es muy útil para administradores de sistemas y DevOps
Ansible permite gestionar los servidores, configuraciones y aplicaciones de forma sencilla.
Utiliza ssh para conectarse a los nodos y únicamente requiere python en el servidor remoto que se vaya a ejecutar para poder utilizarlo.
Usa un fichero YAML para definir las configuraciones y las acciones que se van a desarrollar en los servidores.
Entorno virtual
Necesitamos crear un entorno virtual para tener python al alcance.
- Crear un entorno virtual, lo vamos a llamar ‘ansible’
apt-get install python3-venv
python3 -m venv ansible
source ansible/bin/activate
- Instalamos Ansible en nuestro entorno
pip install ansible
Vamos a clonar el siguiente repositorio para hacer la prueba de uso
- Clonar el repositorio: https://github.com/josedom24/automatizacion_iaw
git clone https://github.com/josedom24/automatizacion_iaw.git
- Comprobamos la versión de Ansible
(ansible) celiagm@debian:~/venv/ansible/automatizacion_iaw$ ansible --version
ansible 2.10.5
config file = /home/celiagm/venv/ansible/automatizacion_iaw/ansible.cfg
configured module search path = ['/home/celiagm/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/celiagm/venv/ansible/lib/python3.7/site-packages/ansible
executable location = /home/celiagm/venv/ansible/bin/ansible
python version = 3.7.3 (default, Jul 25 2020, 13:03:44) [GCC 8.3.0]
- Nos aseguramos de nuestra configuración, en la que en la parte de hosts tenemos la ip de el servidor remoto al que nos vamos a conectar y donde vamos a instalar los servicios.
hosts
[servidores_web]
nodo1 ansible_ssh_host=172.22.200.150 ansible_python_interpreter=/usr/bin/python3
- En site.yaml vamos a tener la configuración para indicar los servicios que vamos a instalar a través de unos roles.
site.yaml
- hosts: all
become: true
roles:
- role: commons
- hosts: servidores_web
become: true
roles:
- role: apache2
- hosts: servidores_web
become: true
roles:
- role: mariadb
- hosts: servidores_web
become: true
roles:
- role: wordpress
- Ejecutamos ansible-playbook con el fichero de configuración, de esta forma se van a ir instalando los servicios en el servidor remoto.
ansible-playbook site.yaml
Salida:
(ansible) celiagm@debian:~/venv/ansible/automatizacion_iaw$ ansible-playbook site.yaml
PLAY [all] **********************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [nodo1]
TASK [commons : Ensure system is updated] ***************************************************************
[WARNING]: Updating cache and auto-installing missing dependency: python3-apt
changed: [nodo1]
PLAY [servidores_web] ***********************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [nodo1]
TASK [apache2 : install apache2+php] ********************************************************************
ok: [nodo1]
TASK [apache2 : Copy index.html] ************************************************************************
changed: [nodo1]
TASK [apache2 : Copy info.php] **************************************************************************
changed: [nodo1]
RUNNING HANDLER [apache2 : restart apache2] *************************************************************
changed: [nodo1]
PLAY [servidores_web] ***********************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [nodo1]
TASK [mariadb : ensure mariadb is installed] ************************************************************
ok: [nodo1]
TASK [mariadb : ensure mariadb binds to internal interface] *********************************************
changed: [nodo1]
RUNNING HANDLER [mariadb : restart mariadb] *************************************************************
changed: [nodo1]
PLAY [servidores_web] ***********************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [nodo1]
TASK [wordpress : install unzip] ************************************************************************
changed: [nodo1]
TASK [wordpress : download wordpress] *******************************************************************
changed: [nodo1]
TASK [wordpress : unzip wordpress] **********************************************************************
changed: [nodo1]
TASK [wordpress : create database wordpress] ************************************************************
changed: [nodo1]
TASK [wordpress : create user mysql wordpress] **********************************************************
changed: [nodo1] => (item=localhost)
TASK [wordpress : copy wp-config.php] *******************************************************************
changed: [nodo1]
RUNNING HANDLER [wordpress : restart apache2] ***********************************************************
changed: [nodo1]
PLAY RECAP **********************************************************************************************
nodo1 : ok=19 changed=13 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0