Ansible是用Python編寫的,用于調(diào)試本地代碼執(zhí)行的工具是Python調(diào)試器 **pdb**
嗅虏。這個(gè)工具允許我們在Ansys中插入斷點(diǎn)代碼和交互式地逐行執(zhí)行代碼。
加入調(diào)試代碼
找到ansible的運(yùn)行文件
[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()
然后運(yùn)行ansible命令仇轻,就進(jìn)入了pdb調(diào)試狀態(tài)
pdb常用命令
輸入help 查看幫助信息
輸入n(next)
水由,讓程序運(yùn)行下一行,如果當(dāng)前語句有一個(gè)函數(shù)調(diào)用竖独,用n是不會進(jìn)入被調(diào)用的函數(shù)體中的
輸入l(list)
裤唠,查看代碼片段
輸入p(pp)
查看變量的值
輸入s(step into)
跟n
相似,但是如果當(dāng)前有一個(gè)函數(shù)調(diào)用预鬓,那么s
會進(jìn)入被調(diào)用的函數(shù)體中
輸入r(return)
執(zhí)行代碼直到從當(dāng)前函數(shù)返回
輸入b
設(shè)置斷點(diǎn)巧骚,例如 “b 78”赊颠,就是在當(dāng)前腳本的78行打上斷點(diǎn),還能輸入函數(shù)名作為參數(shù)劈彪,斷點(diǎn)就打到具體的函數(shù)入口竣蹦,如果只敲b,會顯示現(xiàn)有的全部斷點(diǎn)
輸入a(rgs)
沧奴,打印當(dāng)前函數(shù)的參數(shù)
輸入bt(w)
打印堆棧跟蹤痘括,最下面的幀位于底部。箭頭表示“當(dāng)前幀”滔吠,它決定了大多數(shù)命令的上下文纲菌。
輸入c (continue)
停止 debug 繼續(xù)執(zhí)行程序,直到下一個(gè)斷點(diǎn)。
輸入q(uit)
疮绷,退出調(diào)試
有時(shí)候我們只是想調(diào)試某一部分代碼翰舌,如果從命令入口開始調(diào)試則很難找到相應(yīng)的代碼,這樣就需要在某一模塊的入口上添加調(diào)試點(diǎn)就可以了冬骚。
調(diào)試inventory
代碼
inventory
負(fù)責(zé)發(fā)現(xiàn)椅贱,解析,加載主機(jī)清單只冻。
inventory
的主要入口在inventory/init.py文件中的Inventory類庇麦,這個(gè)文件在linux下通常存在/usr/lib/python2.6/site-packages/ansible/inventory/init.py,如果不知道自己的ansible路徑在哪里喜德,可以使用python -c "import ansible; print(ansible)"命令查看山橄。
下面是在init()方法中添加了斷點(diǎn)
調(diào)試Playbook
代碼
Playbook
負(fù)責(zé)加載,解析舍悯,執(zhí)行yml文件的playbook航棱。
palybook的主要入口在playbook/init.py文件的Playbook類,這個(gè)文件在linux下通常存在/usr/lib/python2.6/site-packages/ansible/playbook/init.py.
下面是在init()方法中添加了斷點(diǎn)
其他的功能模塊調(diào)試方法類似贱呐。