Ansible ofrece un depurador de tareas para que pueda corregir errores durante la ejecución en lugar de editar su libro de jugadas y ejecutarlo nuevamente para ver si su cambio funcionó. Tiene acceso a todas las funciones del depurador en el contexto de la tarea. Puede verificar o establecer el valor de las variables, actualizar los argumentos del módulo y volver a ejecutar la tarea con las nuevas variables y argumentos. El depurador le permite resolver la causa del error y continuar con la ejecución del libro de jugadas.
-
Habilitando el depurador
-
Habilitar el depurador con el
debugger
palabra clave- Ejemplos de uso de
debugger
palabra clave
- Ejemplos de uso de
- Habilitar el depurador en la configuración o una variable de entorno
- Habilitando el depurador como estrategia
-
- Resolución de errores en el depurador
-
Comandos de depuración disponibles
- Comando de impresión
- Actualizar comando args
- Actualizar comando vars
- Actualizar comando de tarea
- Rehacer comando
- Continuar comando
- Salir del comando
- Cómo interactúa el depurador con la estrategia gratuita
Habilitando el depurador
El depurador no está habilitado de forma predeterminada. Si desea invocar el depurador durante la ejecución del libro de jugadas, primero debe habilitarlo.
Utilice uno de estos tres métodos para habilitar el depurador:
- con la palabra clave depurador
- en configuración o una variable de entorno, o
- como estrategia
Habilitar el depurador con el debugger
palabra clave
Nuevo en la versión 2.5.
Puedes usar el debugger
palabra clave para habilitar (o deshabilitar) el depurador para una obra, función, bloqueo o tarea específicos. Esta opción es especialmente útil al desarrollar o ampliar libros de jugadas, obras de teatro y roles. Puede habilitar el depurador en tareas nuevas o actualizadas. Si fallan, puede corregir los errores de manera eficiente. los debugger
palabra clave acepta cinco valores:
Valor |
Resultado |
---|---|
siempre |
Invoque siempre al depurador, independientemente del resultado |
Nunca |
Nunca invoque al depurador, independientemente del resultado |
on_failed |
Solo invoca al depurador si falla una tarea |
on_unreachable |
Solo invoque al depurador si no se puede acceder a un host |
on_skipped |
Solo invoque al depurador si se omite la tarea |
Cuando usa el debugger
palabra clave, el valor que especifique anula cualquier configuración global para habilitar o deshabilitar el depurador. Si tu defines debugger
en múltiples niveles, como en un rol y en una tarea, Ansible respeta la definición más granular. La definición a nivel de juego o rol se aplica a todos los bloques y tareas dentro de ese juego o rol, a menos que especifiquen un valor diferente. La definición en el nivel de bloque anula la definición en el nivel de juego o rol, y se aplica a todas las tareas dentro de ese bloque, a menos que especifiquen un valor diferente. La definición a nivel de tarea siempre se aplica a la tarea; anula las definiciones a nivel de bloque, juego o rol.
Ejemplos de uso de debugger
palabra clave
Ejemplo de configuración del debugger
palabra clave en una tarea:
-name: Execute a command ansible.builtin.command:"false"debugger: on_failed
Ejemplo de configuración del debugger
palabra clave en una obra de teatro:
-name: My play hosts: all debugger: on_skipped tasks:-name: Execute a command ansible.builtin.command:"true"when:False
Ejemplo de configuración del debugger
palabra clave en varios niveles:
-name: Play hosts: all debugger: never tasks:-name: Execute a command ansible.builtin.command:"false"debugger: on_failed
En este ejemplo, el depurador está configurado en never
en el nivel de juego y para on_failed
a nivel de tarea. Si la tarea falla, Ansible invoca al depurador, porque la definición de la tarea anula la definición de su reproducción principal.
Habilitar el depurador en la configuración o una variable de entorno
Nuevo en la versión 2.5.
Puede habilitar el depurador de tareas globalmente con una configuración en ansible.cfg o con una variable de entorno. Las únicas opciones son True
o False
. Si establece la opción de configuración o la variable de entorno en True
, Ansible ejecuta el depurador en tareas fallidas de forma predeterminada.
Para habilitar el depurador de tareas desde ansible.cfg, agregue esta configuración a la sección de valores predeterminados:
[defaults] enable_task_debugger = True
Para habilitar el depurador de tareas con una variable de entorno, pase la variable cuando ejecute su libro de jugadas:
ANSIBLE_ENABLE_TASK_DEBUGGER=True ansible-playbook -i hosts site.yml
Cuando habilita el depurador globalmente, cada tarea fallida invoca al depurador, a menos que el rol, juego, bloqueo o tarea deshabilite explícitamente el depurador. Si necesita un control más granular sobre las condiciones que activan el depurador, utilice el debugger
palabra clave.
Habilitando el depurador como estrategia
Si está ejecutando libros de jugadas o roles heredados, es posible que vea el depurador habilitado como un estrategia. Puede hacer esto en el nivel de juego, en ansible.cfg o con la variable de entorno ANSIBLE_STRATEGY=debug
. Por ejemplo:
-hosts: test strategy: debug tasks:...
O en ansible.cfg:
[defaults] strategy = debug
Nota
Este método compatible con versiones anteriores, que coincide con las versiones de Ansible anteriores a la 2.5, puede eliminarse en una versión futura.
Resolución de errores en el depurador
Después de que Ansible invoca al depurador, puede usar los siete comandos del depurador para resolver el error que encontró Ansible. Considere este ejemplo de libro de jugadas, que define el var1
variable pero usa el indefinido wrong_var
variable en una tarea por error.
-hosts: test debugger: on_failed gather_facts: no vars:var1: value1 tasks:-name: Use a wrong variable ansible.builtin.ping: data= wrong_var
Si ejecuta este libro de jugadas, Ansible invoca al depurador cuando falla la tarea. Desde el indicador de depuración, puede cambiar los argumentos del módulo o las variables y ejecutar la tarea nuevamente.
PLAY *************************************************************************** TASK [wrong variable] ********************************************************** fatal: [192.0.2.10]: FAILED! => "failed": true, "msg": "ERROR! 'wrong_var' is undefined" Debugger invoked [192.0.2.10] TASK: wrong variable (debug)> p result._result 'failed': True, 'msg': 'The task includes an option with an undefined variable. The error ' "was: 'wrong_var' is undefinedn" 'n' 'The error appears to have been in ' "'playbooks/debugger.yml': line 7, " 'column 7, but mayn' 'be elsewhere in the file depending on the exact syntax problem.n' 'n' 'The offending line appears to be:n' 'n' ' tasks:n' ' - name: wrong variablen' ' ^ heren' [192.0.2.10] TASK: wrong variable (debug)> p task.args u'data': u' wrong_var ' [192.0.2.10] TASK: wrong variable (debug)> task.args['data'] = ' var1 ' [192.0.2.10] TASK: wrong variable (debug)> p task.args u'data': ' var1 ' [192.0.2.10] TASK: wrong variable (debug)> redo ok: [192.0.2.10] PLAY RECAP ********************************************************************* 192.0.2.10 : ok=1 changed=0 unreachable=0 failed=0
Cambiar los argumentos de la tarea en el depurador para usar var1
en lugar de wrong_var
hace que la tarea se ejecute correctamente.
Comandos de depuración disponibles
Puede utilizar estos siete comandos en el indicador de depuración:
Mando |
Atajo |
Acción |
---|---|---|
impresión |
pag |
Imprimir información sobre la tarea |
task.args[key] = valor |
sin atajo |
Actualizar los argumentos del módulo |
task_vars[key] = valor |
sin atajo |
Actualice las variables de la tarea (debe |
update_task |
tu |
Recrear una tarea con variables de tarea actualizadas |
rehacer |
r |
Ejecuta la tarea nuevamente |
Seguir |
C |
Continuar ejecutando, comenzando con la siguiente tarea |
dejar |
q |
Salir del depurador |
Para obtener más detalles, consulte las descripciones individuales y los ejemplos a continuación.
Comando de impresión
print *task/task.args/task_vars/host/result*
imprime información sobre la tarea:
[192.0.2.10] TASK: install package (debug)> p task TASK: install package [192.0.2.10] TASK: install package (debug)> p task.args u'name': u' pkg_name '[192.0.2.10] TASK: install package (debug)> p task_vars u'ansible_all_ipv4_addresses':[u'192.0.2.10'],u'ansible_architecture': u'x86_64',...[192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] u'bash' [192.0.2.10] TASK: install package (debug)> p host 192.0.2.10 [192.0.2.10] TASK: install package (debug)> p result._result '_ansible_no_log':False,'changed':False,u'failed':True,...u'msg': u"No package matching 'not_exist' is available"
Actualizar comando args
task.args[*key*] = *value*
actualiza un argumento de módulo. Este libro de jugadas de muestra tiene un nombre de paquete no válido:
-hosts: test strategy: debug gather_facts: yes vars:pkg_name: not_exist tasks:-name: Install a package ansible.builtin.apt: name= pkg_name
Cuando ejecuta el libro de jugadas, el nombre del paquete no válido desencadena un error y Ansible invoca al depurador. Puede corregir el nombre del paquete viendo y luego actualizando el argumento del módulo:
[192.0.2.10] TASK: install package (debug)> p task.args u'name': u' pkg_name '[192.0.2.10] TASK: install package (debug)> task.args['name'] = 'bash' [192.0.2.10] TASK: install package (debug)> p task.args u'name':'bash'[192.0.2.10] TASK: install package (debug)> redo
Después de actualizar el argumento del módulo, use redo
para ejecutar la tarea nuevamente con los nuevos argumentos.
Actualizar comando vars
task_vars[*key*] = *value*
actualiza el task_vars
. Puede arreglar el libro de jugadas anterior viendo y luego actualizando las variables de la tarea en lugar de los argumentos del módulo:
[192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] u'not_exist' [192.0.2.10] TASK: install package (debug)> task_vars['pkg_name'] = 'bash' [192.0.2.10] TASK: install package (debug)> p task_vars['pkg_name'] 'bash' [192.0.2.10] TASK: install package (debug)> update_task [192.0.2.10] TASK: install package (debug)> redo
Después de actualizar las variables de la tarea, debe usar update_task
para cargar las nuevas variables antes de usar redo
para ejecutar la tarea nuevamente.
Nota
En 2.5 esto se actualizó de vars
para task_vars
para evitar conflictos con el vars()
función de Python.
Actualizar comando de tarea
Nuevo en la versión 2.8.
u
o update_task
recrea la tarea a partir de la estructura de datos de la tarea original y las plantillas con variables de tarea actualizadas. Ver la entrada Actualizar comando vars para un ejemplo de uso.
Rehacer comando
r
o redo
ejecuta la tarea de nuevo.
Continuar comando
c
o continue
continúa ejecutándose, comenzando con la siguiente tarea.
Salir del comando
q
o quit
cierra el depurador. Se cancela la ejecución del libro de jugadas.
Cómo interactúa el depurador con la estrategia gratuita
Con el predeterminado linear
estrategia habilitada, Ansible detiene la ejecución mientras el depurador está activo y ejecuta la tarea depurada inmediatamente después de que ingrese el redo
mando. Con el free
Sin embargo, con la estrategia habilitada, Ansible no espera a todos los hosts y puede poner en cola tareas posteriores en un host antes de que una tarea falle en otro host. Con el free
estrategia, Ansible no pone en cola ni ejecuta ninguna tarea mientras el depurador está activo. Sin embargo, todas las tareas en cola permanecen en la cola y se ejecutan tan pronto como sale del depurador. Si utiliza redo
para reprogramar una tarea desde el depurador, otras tareas en cola pueden ejecutarse antes que su tarea reprogramada. Para obtener más información sobre estrategias, consulte Controlar la ejecución del libro de jugadas: estrategias y más.
Ver también
- Ejecución de playbooks para solucionar problemas
-
Ejecutar libros de jugadas durante la depuración o la prueba
- Introducción a los libros de jugadas
-
Introducción a los libros de jugadas
- Lista de correo de usuarios
-
¿Tengo una pregunta? ¡Pasa por el grupo de google!
- irc.freenode.net
-
Canal de chat de IRC #ansible
Si crees que ha sido de provecho este artículo, sería de mucha ayuda si lo compartieras con el resto desarrolladores así nos ayudas a difundir nuestra información.