【发布时间】:2019-09-09 19:11:05
【问题描述】:
我不得不编写一些共享代码的 Ansible 模块,所以我尝试变得聪明,并使用 setuptools 将它们打包。
安装的可执行文件使用 pkg_resources.load_entry_point,如果我从 CLI 手动运行它,我可以像这样输入 JSON。
$ siptrack_list.py|jq
{"ANSIBLE_MODULE_ARGS": {"pattern": "vmlnx-web0"}}
{
"invocation": {
"module_args": {
"pattern": "vmlnx-web0",
"search_all": false,
"max_results": 10,
"regexp": false
}
},
"output": [
{
"oid": "1238720",
"name": "vmlnx-web02"
},
{
"oid": "1238562",
"name": "vmlnx-web01"
},
{
"oid": "1771701",
"name": "vmlnx-web03"
}
],
"changed": false,
"returned": [
{
"oid": "1238720",
"name": "vmlnx-web02"
},
{
"oid": "1238562",
"name": "vmlnx-web01"
},
{
"oid": "1771701",
"name": "vmlnx-web03"
}
]
}
而且它有效!我得到了 JSON 格式的结果。
但如果我使用 ansible 或 ansible-playbook 可执行文件运行它,我会收到此错误。
fatal: [127.0.0.1]: FAILED! => {"changed": false, "msg": "Error: Module unable to decode valid JSON on stdin. Unable to figure out what parameters were passed"}
这是我使用的剧本。
---
- hosts: 127.0.0.1
connection: local
gather_facts: False
tasks:
- name: List siptrack devices
siptrack_list:
pattern: vmlnx-web02
max_results: 1
register: results
- debug:
msg: "{{ results }}"
所以我很想知道我在这里缺少什么。因为我喜欢使用 setuptools。这个想法是将可执行文件符号链接到 Ansible 库目录中。或者是否有人对如何在 Ansible 模块之间共享代码有其他想法?
如果我使用 ansible 并调用模块也会出错。
$ ansible -m siptrack_list -a 'pattern=vmlnx-we' -c local 127.0.0.1
127.0.0.1 | FAILED! => {
"changed": false,
"msg": "Error: Module unable to decode valid JSON on stdin. Unable to figure out what parameters were passed"
}
【问题讨论】:
-
旁注:
- debug: msg: "{{ results }}"可以写成- debug: var: results
标签: python ansible setuptools