Ansible 开发调试 之【模块调试】

本地调试


需要安装jinja2 库

yum -y install python-jinja2

使用官方提供的测试脚本调试

git clone git://github.com/ansible/ansible.git
source ansible/hacking/env-setup
cd ansible/hacking/

使下列命令调试modules

python test-module -m /usr/lib/python2.6/site-packages/ansible/modules/system/ping.py
image.png

test-module使用参数


image.png

远程调试


在前面的介绍中,我们知道modules是在远程主机上执行的,调试模块那就需要在远程主机上执行,ansible默认在执行完modules,会自动清理在远程主机上的临时文件。
使用ANSIBLE_KEEP_REMOTE_FILES=1环境变量 ,可以保留ansible在远程主机的执行文件,从而在远程主机上调试模块。

$ 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将字符串转换成可执行的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 文件包含一个JSON字符串。 该字符串是一个包含模块参数和其他变量的字典。
  • ansible目录包含由ansible_module_ping模块使用的ansible.module_utils的代码文件。

修改了debug_dir文件中的代码之后,需要使用execute执行代码

$ python /root/.ansible/tmp/ansible-tmp-1489477306.61-275734926719932/ping.py execute
{"invocation": {"module_args": {"data": "debugging_session"}}, "changed": false, "ping": "debugging_session"}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在开发模块之前,现问下自己几个问题? 官方是否有提供的类似功能模块?可从下面两个连接确定官方提供的模块,以免重复造...
    lework阅读 2,273评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 今天给大家分享最新的干货,刚好碰上这段时间设计市场截图,所以给各位设计新人,分享本人整合的尺寸大全,希望对你们的设...
    毒枭J哥阅读 19,245评论 2 20
  • 今天我来说说思考的习惯。去年下半年开始,我将平时的感悟记录下来。半年以来,收获不小。遇到事情,我会很自然地进...
    ivisliu阅读 441评论 0 4
  • 周日的百货商场人头攒动。小雅和平一早就来到了这里,他俩的婚期是下月中旬,这俩懂事儿的孩子,自己拿着购物清单来商场采...
    田真十阅读 431评论 0 0