Ansible: instalación, configuración y uso con Windows y Linux

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
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.

ansible-inventory

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.io)

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:




Deja un comentario