Spec-Zone.ru › Ansible 2.9

Отладчик Playbook

  • Использование ключевого слова отладчика
    • На задаче
    • На игре
  • Конфигурация или переменная окружения
  • В качестве стратегии
  • Примеры
  • Доступные команды
    • p(print) task/task_vars/host/result
    • task.args[ключ] = значение
    • task_vars[ключ] = значение
    • u(pdate_task)
    • r(edo)
    • c(ontinue)
    • q(quit)
  • Использование со стратегией «free»

Ansible включает отладчик как часть плагинов стратегии. Этот отладчик позволяет отлаживать задачи. У вас есть доступ ко всем функциям отладчика в контексте задачи. Затем, например, вы можете проверить или установить значение переменных, обновить аргументы модуля и повторно запустить задачу с новыми переменными и аргументами, чтобы помочь определить причину сбоя.

Существует несколько способов вызова отладчика.

Использование ключевого слова отладчика

Новое в версии 2.5.

Ключевое слово debugger может быть использовано в любом блоке, где вы предоставляете атрибут name, таком как игра, роль, блок или задача.

Ключевое слово debugger принимает несколько значений:

always
Всегда вызывать отладчик, независимо от результата
never
Никогда не вызывать отладчик, независимо от результата
on_failed
Вызывать отладчик только в случае сбоя задачи
on_unreachable
Вызывать отладчик только в том случае, если хост был недоступен
on_skipped
Вызывать отладчик только в том случае, если задача пропущена

Эти параметры переопределяют глобальную конфигурацию для включения или отключения отладчика.

На задаче

- name: Execute a command
  command: false
  debugger: on_failed

На игре

- name: Play
  hosts: all
  debugger: on_skipped
  tasks:
    - name: Execute a command
      command: true
      when: False

Когда предоставляется на общем уровне и более конкретном уровне, более конкретный уровень имеет приоритет:

- name: Play
  hosts: all
  debugger: never
  tasks:
    - name: Execute a command
      command: false
      debugger: on_failed

Конфигурация или переменная окружения

Новое в версии 2.5.

В ansible.cfg:

[defaults]
enable_task_debugger = True

В качестве переменной окружения:

ANSIBLE_ENABLE_TASK_DEBUGGER=True ansible-playbook -i hosts site.yml

При использовании этого метода любая неудачная или недоступная задача вызовет отладчик, если не отключена явно.

В качестве стратегии

Примечание

Это обратная совместимая методика, соответствующая версиям Ansible до 2.5, и может быть удалена в будущих выпусках

Чтобы использовать стратегию debug, измените атрибут strategy следующим образом:

- hosts: test
  strategy: debug
  tasks:
  ...

Если вы не хотите изменять код, вы можете определить переменную окружения ANSIBLE_STRATEGY=debug, чтобы включить отладчик, или изменить ansible.cfg, например:

[defaults]
strategy = debug

Примеры

Например, запустите playbook ниже:

- hosts: test
  debugger: on_failed
  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
[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 undefined\n"
        '\n'
        'The error appears to have been in '
        "'playbooks/debugger.yml': line 7, "
        'column 7, but may\n'
        '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 variable\n'
        '      ^ here\n'}
[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

На этот раз задача выполняется успешно!

Доступные команды

p(print) task/task_vars/host/result

Вывести значения, используемые для выполнения модуля:

[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"}

task.args[ключ] = значение

Обновить аргумент модуля.

Если вы запустите playbook так:

- hosts: test
  strategy: debug
  gather_facts: yes
  vars:
    pkg_name: not_exist
  tasks:
    - name: install package
      apt: name={{ pkg_name }}

Отладчик вызывается из-за неправильного имени пакета, поэтому давайте исправим аргументы модуля:

[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

Затем задача снова выполняется с новыми аргументами.

task_vars[ключ] = значение

Обновить task_vars.

Давайте используем тот же playbook выше, но исправим task_vars вместо аргументов:

[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

Затем задача снова выполняется с новыми task_vars.

Примечание

В версии 2.5 это было обновлено с vars на task_vars, чтобы не конфликтовать с функцией python vars().

u(pdate_task)

Новое в версии 2.8.

Эта команда пересоздает задачу из исходной структуры данных задачи и шаблонов с обновленными task_vars.

См. вышеописанную документацию для task_vars[ключ] = значение для примера использования.

r(edo)

Повторить задачу.

c(ontinue)

Продолжить.

q(quit)

Выйти из отладчика. Выполнение playbook прерывается.

Использование со стратегией «free»

Использование отладчика со стратегией free приведет к тому, что дальнейшие задачи не будут поставлены в очередь или выполнены, пока активен отладчик. Кроме того, использование redo для задачи с целью ее повторного выполнения может привести к выполнению перепланированной задачи после последующих задач, указанных в вашем playbook.

См. также

О Playbook
Введение в 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.9/user_guide/playbooks_debugger.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API