Ansible是用Python編寫的,用于調試本地代碼執行的工具是Python調試器 **pdb**
。這個工具允許我們在Ansys中插入斷點代碼和交互式地逐行執行代碼。
加入調試代碼
找到ansible的運行文件
[root@master ~]# whereis ansible
ansible: /usr/bin/ansible /etc/ansible /usr/share/man/man1/ansible.1.gz
在/usr/bin/ansible文件開始處加入
import pdb; pdb.set_trace()
然后運行ansible命令,就進入了pdb調試狀態
pdb常用命令
輸入help 查看幫助信息
輸入n(next)
,讓程序運行下一行,如果當前語句有一個函數調用,用n是不會進入被調用的函數體中的
輸入l(list)
,查看代碼片段
輸入p(pp)
查看變量的值
輸入s(step into)
跟n
相似,但是如果當前有一個函數調用,那么s
會進入被調用的函數體中
輸入r(return)
執行代碼直到從當前函數返回
輸入b
設置斷點,例如 “b 78”,就是在當前腳本的78行打上斷點,還能輸入函數名作為參數,斷點就打到具體的函數入口,如果只敲b,會顯示現有的全部斷點
輸入a(rgs)
,打印當前函數的參數
輸入bt(w)
打印堆棧跟蹤,最下面的幀位于底部。箭頭表示“當前幀”,它決定了大多數命令的上下文。
輸入c (continue)
停止 debug 繼續執行程序,直到下一個斷點。
輸入q(uit)
,退出調試
有時候我們只是想調試某一部分代碼,如果從命令入口開始調試則很難找到相應的代碼,這樣就需要在某一模塊的入口上添加調試點就可以了。
調試inventory
代碼
inventory
負責發現,解析,加載主機清單。
inventory
的主要入口在inventory/init.py文件中的Inventory類,這個文件在linux下通常存在/usr/lib/python2.6/site-packages/ansible/inventory/init.py,如果不知道自己的ansible路徑在哪里,可以使用python -c "import ansible; print(ansible)"命令查看。
下面是在init()方法中添加了斷點
調試Playbook
代碼
Playbook
負責加載,解析,執行yml文件的playbook。
palybook的主要入口在playbook/init.py文件的Playbook類,這個文件在linux下通常存在/usr/lib/python2.6/site-packages/ansible/playbook/init.py.
下面是在init()方法中添加了斷點
其他的功能模塊調試方法類似。