Hay momentos en que se desea que Ansible deje de imprimir cualquier texto propio y muestre solo la salida del comando remoto.
Es como ssh user@server command pero con todas las opciones de Ansible, argumentos SSH personalizados, diferentes transportes y demás funcionalidades avanzadas.
Me refiero al binario ansible y no a ansible-playbook aunque con algunos ajustes es posible aplicar este truco también a ansible-playbook.
Fundamento del truco 1) Usar el modulo raw para ejecutar comandos remotos y evitar el empaquetado de resultados por AnsiballZ 2) Forzar la salida en formato json para extraer stdout sin usar expresiones grep poco fiables 3) Procesar la salida con jq 4) Pedir a jq que no imprima comillas en los valores de cadena
ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ANSIBLE_STDOUT_CALLBACK=json ansible -i localhost, -m raw -a cat /etc/passwd all -c local | jq -r .plays[].tasks[].hosts[]?.stdout
Diseccion 1) Las variables de entorno indican a Ansible que cargue plugins de callback y que utilice el callback json para la salida 2) -i localhost, y -c local no son fundamentales en el ejemplo, se puede usar el inventario que corresponda 3) -m raw -a comando es la invocacion habitual de ansible para ejecutar comandos remotos sin module wrapping 4) -r en jq elimina las comillas de las cadenas 5) La expresion .plays[].tasks[].hosts[]?.stdout recorre todas las tareas y hosts en todas las plays y extrae stdout
Por que puede ser util Lo que yo necesitaba era recuperar un archivo secreto desde un servidor remoto y encriptarlo localmente usando sops. Se puede usar el modulo community.sops.sops_encrypt pero requiere varios pasos y trabajar con secretos complica la depuracion. Una llamada simple de ansible seguida de una tuberia hacia sops -e consume menos atencion y exige que la salida de Ansible llegue lo mas limpia posible, sin cabeceras ni mensajes adicionales, para no corromper el contenido.
Consejos practicos Sustituir localhost por su inventario real cuando aplique. Si el comando remoto genera saltos de linea o caracteres especiales tener cuidado con el parsing. Este metodo es especialmente util cuando se quiere integrar con utilidades como sops o con tuberias que esperan solo el contenido del stdout.
En Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida. Ofrecemos soluciones de inteligencia artificial e ia para empresas, desarrollo de agentes IA, servicios de ciberseguridad, servicios cloud aws y azure y servicios inteligencia de negocio. Tambien trabajamos con integracion de Power BI y consultoria para potenciar proyectos de datos y analitica. Si buscas expertos en aplicaciones a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, agentes IA, ia para empresas, servicios inteligencia de negocio o Power BI, en Q2BSTUDIO podemos ayudar a diseñar e implementar soluciones seguras, escalables y adaptadas a tu negocio.