Назад | Перейти на главную страницу

Как узнать, почему запущена задача?

Я работаю со сложной системой Ansible с множеством ролей в различных репозиториях. Когда я запускаю определенный сценарий, выполняется задача, которой, как мне кажется, быть не должно. Есть ли способ узнать, что его спровоцировало?

На данный момент Ansible не предоставляет никаких инструментов для визуализации дерева зависимостей задач и ролей.

Что вы могли бы сделать, это

  1. Получите список задач с --list-tasks вариант от ansible-playbook.
  2. Рассмотрите список задач из playbook верхнего уровня в порядке появления и отметьте эти задачи верхнего уровня в списке.
  3. Определите, где находится интересующая вас задача между отмеченными задачами.
  4. Создайте книгу, включающую только отмеченную задачу, которая отображается непосредственно под интересующей вас задачей.
  5. Повторение 1 через 5 пока не будет восстановлен путь через зависимости ролей и задач.

пример

Это описание слишком общее, поэтому вот пример, взятый с реального сайта.

ansible-playbook --list-tasks site.yml

выводит около 900 строк. Игра содержит несколько пьес, и нас интересует игра, которая применяется к определенной группе хостов, называемой computeservers.

Спектакль может выглядеть так:

- hosts:
    - computeservers
  roles: 
    - basic-pkg
    - ntp
    - zabbix
    - slurm
    - jupyter
    - gitlab-ci

Предположим, мы хотели бы знать, почему задача Install compilers работает на этой группе узлов.

Предположим, мы знаем (используя grep), что эта задача принадлежит роли, называемой compilers. Мы видим, что compilers не входит в список ролей верхнего уровня, поэтому находится где-то в дереве зависимостей.

В списке задач ищем спектакль, который начинается с

  play #2 (computeservers): nodes   TAGS: []
    tasks:
       basic-pkg : task1
       basic-pkg : task2
       ...
       slurm : task1
       slurm : task2
       ...
       compilers : Install compilers
       ...
       jupyter : task1
       ...

Итак, мы видим, что наша задача интересует Install compilers находится где-то между ролями высшего уровня slurm и jupyter. Следовательно, нам необходимо продолжить исследование jupyter роль.

это jupyter роль может иметь зависимость

dependencies:
  - scipy

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

jupyter -> scipy -> anaconda -> compilers -> Install compilers

Ansible запускает все задачи в том порядке, в котором они перечислены по умолчанию. Выполнение задачи, которого вы не ожидали, подразумевает некоторую условность. Обычно, когда: выражения, обработчики или включает.

Вам нужно отладить это, как программное обеспечение. Найдите самый простой тестовый пример. Распечатайте состояние, например, используя модуль отладки. Чтобы получить более конкретный совет, опубликуйте свой (очищенный от конфиденциальной информации) сценарий и роли.