Ansible es un software de código abierto para la gestión de configuración multiplataforma (Linux, Windows, equipos de red, etc.).
En otras palabras, Ansible te permitirá administrar, implementar o incluso ejecutar acciones en un grupo de computadoras en una “única línea de comando”.
Las acciones/configuración están escritas en un archivo de formato YAML, también llamado libro de jugadas.
A través de este tutorial te explicaré cómo instalar Ansible, luego veremos cómo crear nuestro inventario (computadoras) y terminaremos con la creación de diferentes playbooks.
Al final de este tutorial, espero haberte convencido de usar Ansible y podrás crear tus propios libros de jugadas.
Requisitos previos
Para este tutorial, necesitará una máquina Linux para instalar Ansible, una máquina Windows y Linux.
Para poder conectarse a la computadora con Windows, es necesario configurar WinRM.
Desde Windows 2012, WinRM normalmente está habilitado, lo único que debe hacer es habilitar la autenticación CredSSP para los servidores miembros del dominio usando el siguiente comando:
Enable-WSManCredSSP -Role Server
Para computadoras que no son miembros de un dominio de Active Directory, debe usar la autenticación básica
winrm set winrm/config/client/auth '@{Basic="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
Para acercarnos lo más posible al uso empresarial, en este tutorial utilicé dos servidores Windows que son miembros de un dominio de Active Directory.
Además, te invito a leer esta documentación. : Windows Remote Management — Ansible Documentation
Instalación de Ansible en Ubuntu
Hay varias formas de instalar Ansible en Linux. Con Ubuntu, Ansible está disponible a través del administrador de paquetes, lo que facilita su instalación.
Desde la terminal, ingrese el siguiente comando para instalar Ansible:
sudo apt install ansible
Confirmar la instalación del paquete
Una vez instalado, ingrese el siguiente comando para verificar que Ansible esté instalado:
ansible --version
Instalación de componentes adicionales para administrar servidores Windows
Para administrar servidores Windows que son miembros de un dominio de Active Directory, es necesario instalar componentes adicionales para que pueda conectarse a los servidores mediante credssp.
Como Ansible usa Python, instalaremos pip y luego instalaremos los complementos de Python.
sudo apt install python3-pip
Ahora pasaremos a instalar pywinrm[credssp], que nos permitirá conectarnos a nuestros servidores Windows.
Instalar pywinrm[credssp]:
sudo pip install "pywinrm[credssp]"
SI también recibe el error ERROR: pyopenssl 20.0.1 tiene criptografía requerida>=3.2, pero tendrá criptografía 2.8 que es incompatible, aquí se explica cómo instalar la versión correcta de criptografía.
Ingrese el siguiente comando para actualizar la criptografía:
sudo pip install -U cryptography
Instalación de SSHPASS
Para poder conectarse vía SSH con un par nombre de usuario/contraseña, es necesario instalar SSHPASS.
sudo apt install sshpass
Una vez instalado, abra el archivo /etc/ansible/ansible.cfg.
sudo nano /etc/ansible/ansible.cfg
En la sección [valores predeterminados], agregue:
host_key_checking = False
Ansible está instalado, ahora pasaremos a la parte del inventario.
Inventario de servidores para Ansible
El inventario en Ansible es algo bastante complejo, en este tutorial te explicaré cómo empezar con el inventario en Ansible, pero te invito a leer la documentación oficial para saber más. : How to build your inventory — Ansible Documentation
Por defecto el inventario en Ansible se realiza en el archivo /etc/ansible/hosts que es un archivo en formato ini y que contiene diferentes grupos en los que declaramos los servidores de destino.
Por defecto, así es como se ve el archivo:
Le mostraré varias soluciones para administrar su inventario en Ansible.
Otras soluciones son posibles, se explican en la documentación.
Declarar computadoras en Ansible
Comenzaremos con el método más simple, que consiste en agregar un grupo y las direcciones IP de los servidores que contiene.
Aquí está el bloque que agregaremos al archivo de hosts ansible.
Abra el archivo con nano:
sudo nano /etc/ansible/hosts
Agregue el bloque de texto al archivo:
Guarda el archivo.
Agregamos 2 computadoras con Windows y una computadora en el grupo Ubuntu al inventario.
Para mostrar el inventario utilice el siguiente comando:
ansible-inventory --list
Como puede ver, encontramos las computadoras que declaramos en el archivo de hosts.
Esta solución no es muy «fácil de usar», cuando tienes uno o dos servidores, poner las direcciones IP está bien, pero cuando tienes varias docenas o cientos de servidores, no es excelente.
Ahora mejoraremos esto agregando un alias para tener el nombre de la computadora en el inventario.
La declaración se realiza de esta forma:
alias ansible_host=0.0.0.0
Lo que nos da para nuestro ejemplo:
Es más legible así, ¿no?
Edite el archivo /etc/ansible/hosts nuevamente para modificar el inventario:
SI volvemos a enumerar el inventario usando el comando ansible-inventory –list, llegamos a un resultado que es más fácil de usar.
Es mejor así, ¿no?
Hemos declarado nuestro inventario, pero aún necesitamos configurar varios datos, como el par de nombre de usuario/contraseña y cómo conectarnos a las computadoras.
Configurar variables de inventario
De forma predeterminada, Ansible intenta conectarse a las computadoras usando el protocolo SSH, lo cual es bueno para el servidor Ubuntu, pero para nuestro grupo de Windows, es necesario indicarle a Ansible que use WinRM.
La gestión de variables se puede realizar de varias formas:
- En el archivo de hosts
- En un archivo dedicado al grupo
Les mostraré a ambos.
Personalmente, prefiero la segunda solución, porque el archivo hosts rápidamente se vuelve ilegible.
Configurar variables en el archivo de hosts
La primera solución para configurar las variables es directamente en el archivo de hosts agregando las variables en formato INI.
El bloque de variables se define así: [group:vars]
.
Si continuamos con el ejemplo inicial que nos da para el grupo windows y ubuntu:
Como puedes ver, en el grupo de variables indicamos varios datos para conectarnos a los servidores.
Cuantos más grupos tengas en tu inventario, más complicado será seguir el archivo de hosts.
Configuración de variables en un archivo dedicado al grupo
El segundo método que te mostraré en este tutorial te permitirá almacenar las variables en un archivo separado para cada grupo.
Este archivo debe colocarse en la carpeta /etc/ansible/group_vars/ y debe tener el nombre del grupo (winodws.yml/ubuntu.yml).
Aquí el formato no es INI sino YAML.
Si la carpeta no existe, créela:
sudo mkdir /etc/ansible/group_vars
Luego cree el archivo con el nombre del grupo:
sudo touch /etc/ansible/group_vars/windows.yml
Edite el archivo:
sudo nano/etc/ansible/group_vars/windows.yml
Aquí está el contenido del archivo windows.yml:
Para el archivo ubuntu.yml, te dejaré hacerlo tú mismo.
Para facilitar la edición, le recomiendo que utilice vscode o notepad++, que admite el formato YML.
Encontrarás la solución aquí. : Ansible : inventory vars #3 ($158) · Extraits de code · Extraits de code · GitLab (rdr-it.com)
Configurar variables en la declaración de host
Para completar esta parte sobre las variables, es posible indicarlas directamente en la declaración del host.
En el segundo ejemplo que di con el alias y luego la IP, esto lo indica el parámetro ansible_host. Todas las variables que han sido declaradas en el grupo se pueden poner en la línea del host, lo cual resulta práctico para gestionar un caso particular.
LAB-APACHE2 ansible_host=192.168.14.79 ansible_connect=ssh ansible_ssh_user=ansible ansible_ssh_pass=$€cr€Tp@$s0rD ansible_python_interpreter='/usr/bin/env python3' ansible_become_method=sudo
Separe el inventario en varios archivos
Es posible tener múltiples inventarios en Ansible.
Para hacer esto, debe crear una carpeta de inventarios en la carpeta /etc/ansible/, luego en esta carpeta crear un archivo de hosts.
Para cada llamada al comando ansible o ansible-playbook, deberá usar el parámetro -i para especificar el inventario.
Más información aquí : Sample Ansible setup — Ansible Documentation
Ahora ya sabes cómo crear tu inventario para Ansible, ahora pasaremos a probar y verificar que todo funcione.
Pruebe la conexión entre Ansible y las computadoras de inventario
Antes de ejecutar acciones de configuración usando playbook, probaremos la correcta configuración de Ansible y nuestra configuración mediante un «ping».
Para probar máquinas con Windows, utilice el siguiente comando:
ansible group -m win_ping
Lo que da para nuestro grupo de Windows:
ansible windows -m win_ping
Si todo está instalado y configurado correctamente, la respuesta de ping será pong.
Para Linux u otra conexión ssh, usaremos ping:
ansible group -m ping
Lo que da para el grupo ubuntu:
ansible ubuntu -m ping
Como ocurre con los ordenadores con Windows, si todo va bien, la respuesta al ping es pong.
Ha realizado su primera interacción entre Ansible y sus servidores. Ahora pasaremos al libro de jugadas.
Playbooks o libros de recetas
Finalmente podremos ponernos manos a la obra y ahora verás todo el poder de Ansible.
Antes de empezar, te explicaré “rápidamente” qué es un playbook.
Un playbook es una lista de acciones que realizaremos en los ordenadores, es un archivo en formato YAML donde describiremos lo que queremos.
Verás con los ejemplos, será más fácil de entender 😉
Antes de lanzarnos a un libro de estrategias, también usaremos Ansible Galaxy, que es un sitio que ofrece módulos que brindarán funcionalidad adicional a Ansible y los necesitaremos en los libros de estrategias que les voy a presentar.
Playbooks Windows
Antes de comenzar a crear nuestro primer manual, que nos permitirá instalar la funcionalidad SNMP y configurar el servicio, necesitaremos instalar módulos adicionales.
Para empezar instalaremos dos colecciones:
Ingrese los siguientes comandos:
ansible-galaxy collection install ansible.windows
ansible-galaxy collection install community.windows
Ahora pasaremos a crear y utilizar nuestro primer libro de jugadas.
Instale y configure la funcionalidad SNMP en Windows con Ansible
Para nuestro primer ejemplo, instalaremos la funcionalidad SNMP y la configuraremos creando una comunidad e indicando también la dirección IP del servidor de monitoreo que estará autorizado a consultar el servicio SNMP.
Comenzaremos creando el archivo que contendrá nuestro playbook, no es obligatorio crear el archivo en la carpeta /etc/ansible/.
Lo crearé en la carpeta de inicio de mi usuario.
touch pb-windows-snmp.yml
Edite el archivo:
nano pb-windows-snmp.yml
Copie el contenido a continuación en el libro de jugadas:
No voy a entrar en detalles sobre el manual, ya que la sintaxis de YAML es bastante sencilla de entender.
Lo que hay que recordar :
La siguiente línea indica a qué grupo se aplica el manual:
hosts: windows # host group to run the module on
Luego tienes el apartado de tareas y debajo podemos ver las diferentes acciones que se llevarán a cabo:
- Instalación de la función de servicio SNMP
- Configuración del servicio SNMP indicando la comunidad y la dirección IP autorizada.
Ahora lanzaremos el libro de jugadas:
ansible-playbook pb-windows-snmp.yml -v
Aquí el vídeo de la ejecución:
Ahora comprobaremos en un servidor, en la lista de servicios encontramos el servicio SNMP. :
Y podemos ver en las propiedades que se ha aplicado la configuración:
En menos de 50 segundos pude instalar y configurar la función SNMP en 2 servidores.
SI reproduce el libro de jugadas, comprobará que el servicio esté instalado y que la configuración SNMP sea correcta, esto garantiza que siempre tendrá la configuración correcta también.
Instale actualizaciones de Windows con un manual de estrategias de Ansible
El segundo manual que les ofrezco para Windows en este tutorial es realizar actualizaciones de Windows.
Lo encuentro especialmente interesante para servidores, porque permite controlar la ejecución de Windows Update.
Aquí está el libro de jugadas:
Ejecute el libro de jugadas para actualizar los servidores.
El modo detallado proporciona comentarios sobre las actualizaciones instaladas.
Manual de estrategias de Linux – Ubuntu
El funcionamiento para Linux es idéntico, como para Windows, aquí tienes un manual que te permitirá actualizar los servidores:
Ejecute el libro de jugadas:
ansible-playbook playbook-ubuntu-update.yml -v
Para poder ejecutar comandos apt, es necesario configurar la cuenta de usuario para usar sudo sin requerir una contraseña.
Ahora ya sabes cómo crear y ejecutar un libro de estrategias.
Conclusión
Este tutorial termina aquí y espero que te haya ayudado a comprender Ansible, que te permitirá optimizar la administración y configuración de tus servidores.
Coplado a Jenkins para la ejecución de los playbooks, tendrás la consola volviendo a grabar y podrás seguir la aplicación de los playbooks.
Hay muchos módulos adicionales disponibles en Ansible Galaxy para permitirle administrar todos sus servidores y equipos (conmutador, enrutador, firewall, etc.).
Llegarán otros tutoriales sobre Ansible y en particular la instalación y configuración con interfaz gráfica. (Ansible AWX / Ansible Semaphore).
También pondré a disposición diferentes manuales en mi git: