Ejemplo: Automatización con ANSIBLE

Entorno de pruebas

Script de instalación GNU/Linux: ejercicio-ansible.sh

Script de instalación Windows: ejercicio-ansible.ps1 [aportado por Adrián Otero]

Usuarios disponibles

LoginPassword 
rootpurple 
usuariopurplecon acceso sudo

Recursos

Funcionamiento

Ansible es una herramienta de automatización de sistemas

El "nodo de control" Ansible es el único participante donde debe estar instalado Ansible (paquete ansible en Debian/Ubuntu) junto con la colección de módulos.

Elementos

Estructura de los Playbooks (sin roles)

Esquema Playbook (sin roles)

Nota: Listado de elementos de configuración en Playbooks

Comandos

Configuración

La configuración global de Ansible está en /etc/ansible

En el directorio $HOME/.ansible está la configuración de usuario (con los correspondientes ansible.cfg, hosts, roles, etc)

Es posible "sobreescribir" la configuración por defecto (global o de usuario) mediante ficheros ansible.cfg y hosts en el directorio de trabajo.

Nota: Detalles sobre configuración

Uso básico de Ansible

(a) Desde la máquina ansible (logueado como usuario/purple), crear el directorio de trabajo ejemplo_ansible y fichero con el inventario de los equipos.

Nota En lugar de enumerar los hosts web1 web2 web3 y web4 , otra alternativa al ternativa sería usar la notación web[1:4].cda.net

 

(b) Crear par de claves RSA para SSH (con passphrase vacía) y propogarlas a las máquinas del ejercicio (pedirá la contraseña de usuario [purple]).

(c) Comprobar la accesibilidad al usuario1 de esas máquinas con el módulo ping de Ansible.

(d) Para evitar indicar el inventario y el usuario en cada invocación, declarar esos datos en el fichero ansible.cfg.

(e) Ejecución de comandos en las máquinas administradas (módulo command)

(f) Consulta de información en las máquinas administradas (serán las variables disponibles en los playbooks) (módulo setup)

 

Playbooks sencillos: instalación de Apache2

(a) Crear el fichero playbook_apache.yml y lanzarlos sobre los servidores web con el comando ansible-playbook (pedirá la contraseña de usuario: purple).

(b) Crear los directorios plantillas y ficheros.

(c) Crear el fichero index.html.j2 con la plantilla parametrizable del home por defecto.

Nota Sintaxis del lenguaje de plantillas Jinja2

(d) Crear el fichero phpinfo.php con un ejemplo de página PHP.

(d) Completar el playbook de Apache con las siguientes tareas.

El fichero playbook_apache.yml resultante debe de quedar como:

(e) Volver a lanzar el playbook y comprobar con un navegador web desde la máquina ansible que se accede a los ficheros index.html y phpinfo.php.

Desde la máquina ansible, comprobar con el comando lynx el acceso a las páginas web de web1.cda.net, web2.cda.net,web3.cda.net y web4.cda.net

 

Playbooks sencillos: instalación de HAProxy

(a) Crear el fichero playbook_haproxy.yml

(b) Crear el fichero plantillas/haproxy.cfg.j2

(c) Lanzar el playbook (pedirá la contraseña de SUDO para usuario [purple])

(d) Desde un navegador web comprobar el funcionamiento del balanceador de carga accediendo a la URL haproxy.cda.net (comprobar la página de estadísticas en la URL http://haproxy.cda.net/haproxy?stats)

Comprobar en la máquina haproxy la configuración de HAProxy creada.

 

Uso de Roles

Los Roles son un mecanismo que permite reutilizar Plays (tareas, variables, handler, etc).

Los Roles "empaquetan" en un directorio los elementos de un Play (tasks, handlers, variables, etc) de modo que puedan ser reutilizados en diferentes Playbooks

Nota: Documentación Roles

Para invocar los Roles disponibles desde un Playbook, se enumeran sus nombres dentro de la sección roles

Es posible instalar nuevos Roles usando el comando ansible-galaxy install <nombre>, seleccionando uno de los Roles disponibles en Ansible Galaxy

Nota: Otro mecanismo (menos potente) para reutilizar "código" Ansible son las sentencias include. Por ejemplo:

Estructura de los Roles

Para utilizar los roles en el Playbook se vincula en la sección roles de cada Play la lista con los nombre de los roles a aplicar en dicha Play.

Ejemplo de definición y uso de Roles

<pendiente>