目前,我正在尝试对一个动作插件进行故障排除,该插件调用其他正在运行的Ansible模块来重用代码,使得这些模块的剧本使用起来更加简单。
以前在测试其他较小的模块时,如果我在运行测试游戏手册时无法发现错误,我会制作一个playbook参数的json文件并将其提供给pdb,如下所示:python -m pdb /path/to/module.py ./test.json
使用动作插件,Ansible做的设置远远超过我能够通过读取主Ansible存储库中的ActionBase文件来推测,使我的json测试无法帮助我诊断问题。
使用Ansible调试功能只需逐步执行各种任务并在playbook中播放,但不会在底层代码中播放。在插件/模块中嵌入import pdb;pdb.set_trace()
无助于在运行播放时运行pdb导致暂停,而不是显示交互式调试器。
答案 0 :(得分:1)
您应该强制执行tty
。调试Ansible插件时,此代码适用于我:
import sys; sys.stdin = open('/dev/tty')
import pdb; pdb.set_trace()