Ansible es cómodo, al menos a mí me ha abierto un universo de facilidades a la hora de gestionar la configuración de las enormes cantidades de servidores que se manejan en los entornos Cloud. (Que esté basado en Python también ayuda mucho). Hacerlo funcionar para comunicarse con hosts Windows desde un host macOS no es tan inmediato, al menos no lo fue para mí. macOS, en general, siempre me hace pagar con un poco de esfuerzo y pain cualquier acción que en otro OS considere trivial. Este post está basado en unas notas de trabajo que elaboré cuándo empecé a tener que configurar hosts Windows para una serie de pruebas.

Configurando hosts Windows para ejecutar Ansible desde macOS: The Pain.

Para ejecutar Ansible y que pueda comunicarse con hosts Windows lo más habitual es utilizar WINRM para Python. Esto, trivial en Linux, puede ser un poco más complicado de conseguir en macOS debido a paths de ejecutables confusos. Incluso si configuras todo correctamente puedes encontrarte con el error: winrm or requests is not installed: No module named 'winrm'

no winrm found

Dice que winrm no está instalado. Bueno, pues a ejecutar python3 -m pip install pywinrm para solucionarlo, ¿verdad? ¡No! Porque has sido diligente y se supone que YA está instalado.

Pausa, a respirar. En realidad el error tiene sentido. Está instalado, ¿pero está instalado para la version de Python que realmente usa Ansible? Para testear esto, podemos ejecutar head -n1 $(which ansible)

el python de ansible

Un momento, ese no es el mismo Python para el que está instalado pywinrm, ¿o si?

el python del sistema

Quizás un poco confuso, pero ya nos hemos dado cuenta de que el error, como siempre en este campo aunque a veces nos cuesta creerlo, el error tiene sentido y sólo nos faltaba indagar un poco para comprenderlo. No, la máquina no estaba confábulando contra nosotros. Ahora sólo nos queda instalar el módulo con pip para el ejecutable correcto.

el python del sistema

Y finalmente tendremos winrmfuncionando para ansible en macOS.

el python del sistema

Kudos como siempre a Stack Overflow, dónde encontré la respuesta.