我不得不编写一些共享代码的Ansible模块,所以我试着变得聪明,并用setuptools打包它们。你知道吗
安装的可执行文件使用pkg_resources.load\入口\点如果我从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 }}"
所以我很想找出我在这里遗漏了什么。因为我喜欢使用安装工具。其想法是将可执行文件符号链接到一个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"
}
尽管标题让人困惑,我还是想把这个问题的真实答案贴出来。我从来不能按我想要的方式使用setuptools,但我确实在文档中找到了一种将共享代码打包到ansible模块中的官方方法。你知道吗
https://docs.ansible.com/ansible/latest/dev_guide/developing_module_utilities.html
这甚至是Ansible本身提供openstack模块通用的共享代码的方式。你知道吗
我以前没用过这种方法。我们所做的是将库分组到逻辑组中,并将它们绑定到Ansible角色下。这些角色发布在内部GitHub上,并使用Galaxy引用。在角色“首次运行”后,该库将提供给整个剧本。因此,您只需在运行任何其他任务之前包含角色,库就可以使用了。你知道吗
相关问题 更多 >
编程相关推荐