Отладчик Playbook
В версии 2.1 мы добавили стратегию debug. Эта стратегия позволяет вызывать отладчик, когда задача завершилась ошибкой. У вас есть доступ ко всем функциям отладчика в контексте завершившейся ошибкой задачи. Затем вы можете, например, проверить или установить значение переменных, обновить аргументы модуля и повторно выполнить не удавшуюся задачу с новыми переменными и аргументами, чтобы помочь определить причину ошибки.
Чтобы использовать стратегию debug, измените атрибут strategy следующим образом:
- hosts: test strategy: debug tasks: ...
Например, запустите playbook ниже:
- hosts: test
strategy: debug
gather_facts: no
vars:
var1: value1
tasks:
- name: wrong variable
ping: data={{ wrong_var }}
Отладчик вызывается, так как переменная wrong_var не определена.
Давайте изменим аргументы модуля и снова запустим задачу
PLAY ***************************************************************************
TASK [wrong variable] **********************************************************
fatal: [192.0.2.10]: FAILED! => {"failed": true, "msg": "ERROR! 'wrong_var' is undefined"}
Debugger invoked
(debug) p result
{'msg': u"ERROR! 'wrong_var' is undefined", 'failed': True}
(debug) p task.args
{u'data': u'{{ wrong_var }}'}
(debug) task.args['data'] = '{{ var1 }}'
(debug) p task.args
{u'data': '{{ var1 }}'}
(debug) redo
ok: [192.0.2.10]
PLAY RECAP *********************************************************************
192.0.2.10 : ok=1 changed=0 unreachable=0 failed=0
На этот раз задача выполняется успешно!
Доступные команды
p task/vars/host/result
Вывод значений, используемых для выполнения модуля:
(debug) p task
TASK: install package
(debug) p task.args
{u'name': u'{{ pkg_name }}'}
(debug) p vars
{u'ansible_all_ipv4_addresses': [u'192.0.2.10'],
u'ansible_architecture': u'x86_64',
...
}
(debug) p vars['pkg_name']
u'bash'
(debug) p host
192.0.2.10
(debug) p result
{'_ansible_no_log': False,
'changed': False,
u'failed': True,
...
u'msg': u"No package matching 'not_exist' is available"}
task.args[key] = value
Обновление аргумента модуля.
Если вы запустите playbook так:
- hosts: test
strategy: debug
gather_facts: yes
vars:
pkg_name: not_exist
tasks:
- name: install package
apt: name={{ pkg_name }}
Отладчик вызван из-за неправильного имени пакета, поэтому давайте исправим аргументы модуля:
(debug) p task.args
{u'name': u'{{ pkg_name }}'}
(debug) task.args['name'] = 'bash'
(debug) p task.args
{u'name': 'bash'}
(debug) redo
Затем задача выполняется снова с новыми аргументами.
vars[key] = value
Обновление переменных.
Давайте используем тот же playbook, что и выше, но исправим переменные вместо аргументов:
(debug) p vars['pkg_name'] u'not_exist' (debug) vars['pkg_name'] = 'bash' (debug) p vars['pkg_name'] 'bash' (debug) redo
Затем задача выполняется снова с новыми переменными.
r(edo)
Повторное выполнение задачи.
c(ontinue)
Просто продолжить.
q(uit)
Выход из отладчика. Выполнение playbook прерывается.
См. также
- Playbooks
- Введение в playbooks
- Список рассылки пользователей
- Есть вопрос? Загляните в группу Google!
- irc.freenode.net
- #ansible IRC чат-канал
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/playbooks_debugger.html