Ansible allows devs 编写将以JSON描述当前主机的动态“快照”的程序(以任何语言)。我使用的是Ansible OSS目前不支持的vSphere,因此我需要编写一个" 自定义清单插件"。
我可以处理vSphere查询主机列表,以及构建与Ansible期望的兼容的JSON。
完全(貌似)文件不完整的地方是:
new_array = Array.new(old_array)
)..如何配置Ansible来调用inventory.sh
并从中获取JSON?实际上,应用程序可能是Java可执行文件(bash inventory.sh
),但我认为如果我能弄清楚如何使用bash,我可以推断Java;和inventory.jar
?这一切都应该通过HTTP连接发生吗?例子? STDOUT
或inventory.sh
如何将JSON传达回Ansible?答案 0 :(得分:2)
库存脚本必须位于Ansible运行的同一台机器上。它不通过http进行通信,Ansible将简单地解析您的程序的STDOUT
。该位置根本不重要,当您致电Ansible时,您必须将路径传递给Ansible:
ansible-playbook ... -i /path/to/your/inventory.sh
为避免每次add this to you ansible.cfg:
传递广告资源位置inventory = /path/to/your/inventory.sh
您还可以将脚本复制到/etc/ansible/hosts
,这是Ansible将查找库存文件/脚本的默认位置,但我更喜欢将它们放在一起,所以我建议将它放在您的剧本/角色等附近
并且(3)在任何地方都记录了这些吗?不要在Ansible文档中看到任何内容......
页面Developing Dynamic Inventory Sources上未提及,但在Dynamic Inventory页面上的某些示例中可以看到它。这些文档是社区管理的,并且从非结构化时代开始,缺乏重要信息。
BTW,包含VMware inventory脚本。通过查看源代码,我看到它导入了一些vSphere的东西。我对VMware的经验很少,所以我无法判断这是否真的是你需要的,也不需要自己编写。
答案 1 :(得分:1)
这完全是用户定义的。通常,您将在Python中编写动态库存并使用输出的json转储来创建库存。
以下是您提到的用例(vSphere)的示例:https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py
简而言之,您可以像普通的Python文件一样创建它并创建选项(就像在 main 中一样)并根据传递的选项有选择地执行函数。这些将进行REST调用并以JSON转储的形式返回输出,Ansible可以解析它以在库存中使用。