Spec-Zone.ru › Ansible 2.7

Отладчик Playbook

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

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)> redo

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

Примечание

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

r(edo)

Повторно выполнить задачу.

c(continue)

Просто продолжить.

q(uit)

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

Использование со стратегией свободного доступа

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

См. также

Работа с Playbook
Введение в playbooks
Список рассылки пользователей
Есть вопрос? Загляните в группу Google!
irc.freenode.net
Канал IRC-чата #ansible

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/user_guide/playbooks_debugger.html

Spec-Zone.ru

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