Aunque Ansible es conocido por gestionar nodos Linux mediante SSH, ¿sabías que Ansible también funciona perfectamente en Windows? Utilizando Windows Remote Management (WinRM), Ansible en Windows puede gestionar eficazmente todos tus nodos de Windows también.
Con Ansible en Windows, puedes realizar tareas como implementar parches, gestionar servidores Windows, ejecutar scripts de PowerShell y más.
En este tutorial, aprenderás cómo configurar tu primer nodo de Windows para que sea gestionado con Ansible y verás cómo ejecutar comandos y playbooks en él.
Prerrequisitos
Si deseas seguir este tutorial, asegúrate de tener lo siguiente antes de comenzar:
- Un host controlador de Ansible: Este tutorial utilizará Ansible v2.9.18 en una máquina con Ubuntu 18.04.5 LTS y una dirección IP de 10.111.4.53. Ten en cuenta que Windows no es compatible como nodo de control, solo como nodo gestionado.
- Python instalado en tu host controlador de Ansible: Este tutorial utilizará Python v2, pero v3 también debería funcionar igual de bien.
- El paquete pip instalado en el controlador de Ansible.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- El servidor Windows que deseas gestionar tiene habilitado PowerShell Remoting
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
Configuración del listener WinRM en Windows
Antes de que Ansible pueda comunicarse con un nodo remoto de Windows, debe poder establecer una conexión con él. Esto se hace a través del protocolo de Microsoft WinRM. WinRM es el mismo protocolo que utiliza PowerShell Remoting para ejecutar comandos remotos desde dentro de PowerShell.
A la fecha de esta redacción, Ansible admite SSH como protocolo de gestión, pero es una función experimental en este momento.
Para que Ansible use WinRM para comunicarse con el nodo de Windows, debe configurar WinRM. Para hacer esto, Ansible proporciona un script de PowerShell que establece varias opciones de WinRM.
Aunque el script de PowerShell que proporciona Red Hat para configurar WinRM ha sido probado y es seguro, debería leerlo y comprender, a un nivel alto, lo que está haciendo.
Su primera tarea será descargar el script de configuración y ejecutar Ansible en el nodo de Windows. Para hacerlo, asumiendo que ya tiene PowerShell Remoting habilitado en su computadora Windows de destino y está en una estación de trabajo con Windows:
Descargue el script de PowerShell ConfigureRemotingForAnsible.ps1 en su computadora local con Windows. Este tutorial asumirá que está guardado en ~\Descargas.
Ejecute el script de configuración en el nodo de Windows que Ansible administrará usando el comando Invoke-Command
. El comando a continuación ejecutará el comando en las dos máquinas de demostración del tutorial y le pedirá la contraseña de la cuenta local adminuser en los nodos de Windows.
De forma predeterminada, el script de configuración configurará WinRM para la autenticación básica HTTP. Si desea que Ansible use una conexión más segura, aprenda Cómo Configurar WinRM sobre HTTPS para Ansible.
Configurando el Controlador de Ansible en Windows
Ahora que el nodo de Windows está listo para Ansible, configuremos el controlador de Ansible para mostrarle a Ansible cómo comunicarse con él.
1. Conéctese a su host controlador de Ansible a través de SSH usando su cliente SSH favorito.
2. Instale el módulo Python pywinrm. El módulo Python pywinrm es necesario para que Ansible en Windows se comunique con los hosts a través del protocolo WinRM.
3. Define los nodos remotos de Windows en un archivo de inventario de Ansible. Un inventario de Ansible es una colección de hosts remotos definidos en un archivo ya sea por su nombre de host o dirección IP. Una vez definidos, puedes dirigirte a los inventarios de Ansible con comandos y playbooks, como verás pronto.
El archivo de inventario de Ansible predeterminado se encuentra en el directorio /etc/ansible/hosts.
El archivo de inventario de ejemplo a continuación crea un windows
grupo de hosts que contiene cada nodo de Windows. El tutorial está utilizando un grupo de hosts aquí para hacer más fácil dirigirse a todos los nodos de Windows (si tienes más de uno) de una vez más tarde.
4. A continuación, define algunas variables requeridas que Ansible usará al conectarse a los hosts de Windows en el archivo de inventario como un grupo windows:vars
.
5. Ahora, utiliza el módulo win_ping de Ansible para ejecutar una prueba de conexión simple a los hosts dentro del grupo de hosts windows
definido en el paso #3.
Una vez ejecutado, puedes ver a continuación que Ansible devuelve texto verde con un mensaje de ÉXITO que indica el intento de ping exitoso.

La salida confirma que el host controlador de Ansible puede comunicarse con el host remoto de Windows correctamente a través de WinRM.
Ejecutando Comandos Ad-hoc en Hosts de Windows
En este punto, estás listo para que Ansible comience a controlar tus nodos de Windows. Ahora vamos a probar esto ejecutando un comando ad-hoc en los nodos de Windows para cambiarlos. Los comandos ad-hoc son excelentes cuando necesitas ejecutar un comando simple en nodos sin crear primero un playbook.
Vamos a demostrar los comandos ad-hoc instalando una característica de Windows en los nodos de Windows definidos en el archivo de inventario del grupo de hosts windows
. Para hacer eso, asumiendo que aún estás conectado por SSH a tu nodo controlador de Ansible:
1. En lugar del módulo win_ping esta vez, llama al módulo win_feature (-m
), pasándole dos argumentos (-a
) de name
y state
indicando el nombre de la característica de Windows y el estado en el que deseas que se encuentre.
Al ejecutar el comando anterior, si todo va bien, Ansible debería conectarse a todos los nodos en el grupo de hosts windows
y ejecutar el comando win_feature en cada uno, verificando y, si no está presente, instalando la característica de Windows Telnet-Client
.

2. Ansible muestra éxito, pero para estar seguro, conéctate manualmente a los nodos de Windows con PowerShell y verifica que la característica de Windows Telnet Client esté instalada. En tu estación de trabajo local de Windows, ejecuta Invoke-Command
para ejecutar el comando de PowerShell Get-WindowsFeature
en cada computadora con Windows.
En este punto, ¡puedes ejecutar cualquier módulo de Windows que desees como comandos ad-hoc!
Creación y ejecución de Playbooks de Ansible en Windows
Una vez que hayas dominado el arte de ejecutar comandos ad-hoc en nodos gestionados de Windows, tu próxima tarea es crear y ejecutar playbooks.. Un playbook de Ansible combina comandos en un solo lugar y te permite escribir lógica compleja para realizar escenarios de automatización complejos.
Ejecución de Comandos Remotos de Windows con el Módulo win_command
Suponiendo que aún estás conectado a tu host controlador de Ansible:
1. Crea una carpeta bajo tu directorio de inicio llamada ansible-windows-demo y cámbiate a ella. Esta carpeta contendrá tu playbook.
2. Abre tu editor de texto favorito y crea y guarda un archivo llamado ansible-windows.yml en el directorio ~/ansible-windows-demo.
Los playbooks de Ansible se escriben en YAML
3. Ahora, copia el siguiente playbook en el archivo ansible-windows.yml para crear una única tarea. Este playbook ejecutará el comando netstat de Windows utilizando el módulo de Ansible de Windows win_command en todos los hosts dentro del grupo de hosts windows
.
El módulo win_command ejecuta comandos en un host remoto de Windows. No permite comandos que incluyan variables como caracteres especiales, saltos de línea, el símbolo mayor que, etc.
4. Invoca el playbook ansible-windows.yml, que ejecuta la tarea en el host remoto mediante el siguiente comando.
Si todo salió bien, deberías ver una salida como la siguiente.

Ejecución de comandos remotos de PowerShell con el módulo win_shell
Creaste un playbook para ejecutar un comando remoto de cmd.exe (netstat
) en nodos gestionados de Windows
en el ejemplo anterior. Ahora subamos un poco el nivel y ejecutemos comandos de PowerShell utilizando el módulo win_shell.
Por defecto, el módulo win_shell se ejecuta en PowerShell en el host de Windows
En tu estación de trabajo local de Windows:
1. Primero, abre tu editor de texto favorito en tu estación de trabajo local con Windows y crea un ejemplo de script de PowerShell y copia el siguiente código en él, guardándolo como one.ps1. Este tutorial guardará el script en ~\one.ps1.
El siguiente código crea un archivo de texto en blanco llamado test2.txt en el directorio C:\temp.
2. Copia el script de PowerShell one.ps1 a tus nodos administrados de Windows usando tu método preferido. Este tutorial asumirá que has copiado el script one.ps1 en la carpeta C:\Temp en cada nodo de Windows.
3. Una vez que el script de PowerShell de ejemplo está en el nodo o nodos de Windows, conéctate a tu host controlador de Ansible y abre tu editor de texto favorito nuevamente. Esta vez, crea y guarda otro libro de jugadas llamado ansible-windows-shell.yml en el mismo directorio ~/ansible-windows-demo.
4. Copia y pega el siguiente libro de jugadas en el archivo ansible-windows-shell.yml. Este libro de jugadas ejecutará dos tareas para demostrar el módulo win_shell. Invoca el script de PowerShell recién copiado del paso n.º 2 e inserta el código de PowerShell directamente en el libro de jugadas para demostrar que el script no es necesario en absoluto.
Para pasar varias líneas de código de PowerShell a un módulo win_shell, utiliza el carácter de tubería
|
.
5. Ahora, invoca el segundo playbook ansible-windows-shell.yml, que se ejecuta en el host remoto pero con PowerShell.

6. Si es necesario, en tu estación de trabajo local de Windows, verifica que el playbook haya ejecutado el script existente y el código de PowerShell en el playbook.
Si el playbook de Ansible se ejecutó correctamente, PowerShell debería devolver dos declaraciones True
indicando que los archivos ahora existen.
Conclusión
En este tutorial, has aprendido cómo configurar tu primer nodo administrado de Windows en Ansible. Aunque Ansible tradicionalmente ha sido conocido como una herramienta de Linux, ¡también se puede utilizar fácilmente para Windows!
¿Qué playbooks y módulos de Windows empezarás a utilizar para gestionar Windows con Ansible?