Ansible中的自定义动态库存脚本/插件

时间:2015-08-18 21:19:31

标签: json ansible inventory vsphere

Ansible allows devs  编写将以JSON描述当前主机的动态“快照”的程序(以任何语言)。我使用的是Ansible OSS目前不支持的vSphere,因此我需要编写一个" 自定义清单插件"。

我可以处理vSphere查询主机列表,以及构建与Ansible期望的兼容的JSON。

完全(貌似)文件不完整的地方是:

  • 如何将Ansible与我的库存应用程序“连接”?也就是说,我的库存应用程序是一个简单的bash脚本(new_array = Array.new(old_array) )..如何配置Ansible来调用inventory.sh并从中获取JSON?实际上,应用程序可能是Java可执行文件(bash inventory.sh),但我认为如果我能弄清楚如何使用bash,我可以推断Java;和
  • Ansible如何从应用程序中实际捕获/获取JSON? inventory.jar?这一切都应该通过HTTP连接发生吗?例子? STDOUTinventory.sh如何将JSON传达回Ansible?

2 个答案:

答案 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可以解析它以在库存中使用。