Я работаю со сложной системой Ansible с множеством ролей в различных репозиториях. Когда я запускаю определенный сценарий, выполняется задача, которой, как мне кажется, быть не должно. Есть ли способ узнать, что его спровоцировало?
На данный момент Ansible не предоставляет никаких инструментов для визуализации дерева зависимостей задач и ролей.
Что вы могли бы сделать, это
--list-tasks
вариант от ansible-playbook
. 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 запускает все задачи в том порядке, в котором они перечислены по умолчанию. Выполнение задачи, которого вы не ожидали, подразумевает некоторую условность. Обычно, когда: выражения, обработчики или включает.
Вам нужно отладить это, как программное обеспечение. Найдите самый простой тестовый пример. Распечатайте состояние, например, используя модуль отладки. Чтобы получить более конкретный совет, опубликуйте свой (очищенный от конфиденциальной информации) сценарий и роли.