本地調(diào)試
需要安裝jinja2 庫
yum -y install python-jinja2
使用官方提供的測(cè)試腳本調(diào)試
git clone git://github.com/ansible/ansible.git
source ansible/hacking/env-setup
cd ansible/hacking/
使下列命令調(diào)試modules
python test-module -m /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
test-module使用參數(shù)
遠(yuǎn)程調(diào)試
在前面的介紹中苇瓣,我們知道modules是在遠(yuǎn)程主機(jī)上執(zhí)行的缨称,調(diào)試模塊那就需要在遠(yuǎn)程主機(jī)上執(zhí)行笛匙,ansible默認(rèn)在執(zhí)行完modules豺鼻,會(huì)自動(dòng)清理在遠(yuǎn)程主機(jī)上的臨時(shí)文件。
使用ANSIBLE_KEEP_REMOTE_FILES=1
環(huán)境變量 郭怪,可以保留ansible在遠(yuǎn)程主機(jī)的執(zhí)行文件,從而在遠(yuǎn)程主機(jī)上調(diào)試模塊士飒。
$ ANSIBLE_KEEP_REMOTE_FILES=1 ansible localhost -m ping -a 'data=debugging_session' -vvv
sing module file /usr/lib/python2.6/site-packages/ansible/modules/core/system/ping.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: root
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo ~/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932 `" && echo ansible-tmp-1489477306.61-275734926719932="` echo ~/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932 `" ) && sleep 0'
<localhost> PUT /tmp/tmpv4EenK TO /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py
<localhost> EXEC /bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py && sleep 0'
localhost | SUCCESS => {
"changed": false,
"invocation": {
"module_args": {
"data": "debugging_session"
},
"module_name": "ping"
},
"ping": "debugging_session"
}
模塊文件是由base64編碼的字符串文件,可使用explode
將字符串轉(zhuǎn)換成可執(zhí)行的python文件
$ python /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py explode
Module expanded into:
/root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/debug_dir
查看debug_dir目錄
$ tree /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/debug_dir/
/root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/debug_dir/
├── ansible
│ ├── __init__.py
│ └── module_utils
│ ├── basic.py
│ ├── __init__.py
│ ├── pycompat24.py
│ ├── six.py
│ └── _text.py
├── ansible_module_ping.py
└── args
- ansible_module_ping.py 是模塊本身的代碼蔗崎。
- args 文件包含一個(gè)JSON字符串酵幕。 該字符串是一個(gè)包含模塊參數(shù)和其他變量的字典。
- ansible目錄包含由ansible_module_ping模塊使用的ansible.module_utils的代碼文件缓苛。
修改了debug_dir文件中的代碼之后芳撒,需要使用execute
執(zhí)行代碼
$ python /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py execute
{"invocation": {"module_args": {"data": "debugging_session"}}, "changed": false, "ping": "debugging_session"}