Вот что я придумал.
Ansible отправляет модули в целевую систему и выполняет их там. Поэтому, если вы меняете модуль локально, ваши изменения вступят в силу при запуске playbook. На моих машинных модулях находятся /usr/lib/python2.7/site-packages/ansible/modules
(ansible-2.1.2.0
). Модуль service
находится в core/system/service.py
. Модули Anisble (экземпляры класса AnsibleModule
, объявленные в module_utils/basic.py
), имеют метод log
, который отправляет сообщения в журнал systemd, если он доступен , или возвращается к syslog
. Итак, запустите journalctl -f
в целевой системе, добавьте операторы отладки (module.log(msg='test')
) в локальный модуль и запустите свою игру. Вы увидите команды отладки под именем ansible-basic.py
.
Кроме того, при запуске ansible-playbook
с -vvv
вы можете увидеть отладочный вывод в журнале systemd
, по крайней мере, сообщения о вызове, и сообщения об ошибках, если они есть.
Еще одна вещь, если вы попытаетесь отладить код, который выполняется локально с pdb
(import pdb; pdb.set_trace()
), скорее всего, вы столкнетесь с BdbQuit
исключением. Это потому, что python
закрывает stdin
при создании потока (ansible
рабочий). Решением здесь является повторное открытие stdin
перед запуском pdb.set_trace()
, как предлагается здесь :
sys.stdin = open('/dev/tty')
import pdb; pdb.set_trace()