Cuando trabajamos con Ansible, es inevitable encontrarnos con errores durante la ejecución de nuestros playbooks. Afortunadamente, Ansible proporciona varias herramientas y estrategias para depurar y solucionar problemas de manera eficiente.
En este post, veremos cómo identificar y corregir errores en Ansible utilizando opciones de depuración, módulos especiales y buenas prácticas.
1. Usando el Modo Verboso (-v, -vv, -vvv)
Si un playbook no se ejecuta correctamente, el primer paso es aumentar el nivel de detalle de la salida usando -v
o versiones más detalladas -vv
y -vvv
:
ansible-playbook mi_playbook.yml -v # Salida con detalles básicos
ansible-playbook mi_playbook.yml -vv # Más información
ansible-playbook mi_playbook.yml -vvv # Información completa sobre la ejecución
Con -vvv
, podemos ver los comandos exactos que Ansible está ejecutando en los nodos remotos.
2. Utilizando el Módulo debug
El módulo debug
nos permite imprimir información en medio de la ejecución de un playbook. Es útil para comprobar valores de variables o estados del sistema.
Ejemplo de uso:
- name: Verificar contenido de una variable
debug:
msg: "El valor de mi_variable es: {{ mi_variable }}"
También podemos usar debug
solo si estamos ejecutando el playbook en modo detallado:
- name: Depurar solo si hay mayor nivel de verbosidad
debug:
msg: "Esta es una información útil"
when: ansible_verbosity >= 2
3. Usar --step
para Ejecutar Paso a Paso
Si queremos ejecutar el playbook paso a paso, podemos usar la opción --step
:
ansible-playbook mi_playbook.yml --step
Esto nos pedirá confirmación antes de ejecutar cada tarea, permitiendo inspeccionar los resultados antes de continuar.
4. Ejecutar Tareas en Modo check
(Dry Run)
Antes de aplicar cambios en los servidores, podemos hacer una prueba sin modificar nada usando --check
:
ansible-playbook mi_playbook.yml --check
Esto mostrará qué cambios se harían sin ejecutarlos realmente.
5. Analizar Errores de Sintaxis con ansible-lint
Si un playbook tiene errores de sintaxis o no sigue las mejores prácticas, podemos usar ansible-lint
:
ansible-lint mi_playbook.yml
Esto nos ayudará a identificar problemas como variables mal definidas o tareas mal estructuradas.
6. Conectarse al Nodo Manualmente
Si un error parece estar relacionado con la conectividad SSH, podemos intentar conectarnos manualmente:
ssh usuario@servidor
Si la conexión falla, puede deberse a problemas de permisos, autenticación o firewall.
También podemos probar si Ansible puede conectarse correctamente usando:
ansible all -m ping -u usuario
Si recibimos SUCCESS
, la conexión funciona correctamente.
7. Revisar los Registros en /var/log
Si estamos gestionando servicios como NGINX, MySQL o Apache, puede ser útil revisar los logs en /var/log/
para entender por qué una tarea falla.
Ejemplo para ver logs de NGINX:
tail -f /var/log/nginx/error.log
Si el error ocurre en un servicio específico, revisa su log correspondiente.
8. Usar --diff
para Ver Cambios en Archivos
Si estamos modificando archivos con Ansible, podemos ver exactamente qué cambios se harán con --diff
:
ansible-playbook mi_playbook.yml --diff
Esto es útil cuando trabajamos con template
o copy
, para verificar antes de aplicar cambios.
Depurar en Ansible es una habilidad clave para cualquier administrador de sistemas. Con técnicas como el uso de debug
, ejecución en modo check
, niveles de verbosidad y análisis de logs, podemos identificar y solucionar problemas de manera eficiente.
En el próximo post, hablaremos sobre Ansible Vault y la gestión segura de credenciales. 🚀