Json Ansible中的自定义动态清单脚本/插件
编写程序(用任何语言),返回描述当前主机动态“快照”的JSON。我使用的是vSphere,Ansible OSS目前不支持vSphere,因此我需要编写这样一个“定制清单插件” 我可以处理vSphere对主机列表的查询,以及构建与Ansible所期望的内容兼容的JSON 文档完全(似乎)平淡的地方是:Json Ansible中的自定义动态清单脚本/插件,json,ansible,inventory,vsphere,Json,Ansible,Inventory,Vsphere,编写程序(用任何语言),返回描述当前主机动态“快照”的JSON。我使用的是vSphere,Ansible OSS目前不支持vSphere,因此我需要编写这样一个“定制清单插件” 我可以处理vSphere对主机列表的查询,以及构建与Ansible所期望的内容兼容的JSON 文档完全(似乎)平淡的地方是: 如何将Ansible与我的库存应用程序“连接”?也就是说,假设我的inventory应用程序是一个简单的bash脚本(inventory.sh)。如何配置Ansible来调用bash inven
- 如何将Ansible与我的库存应用程序“连接”?也就是说,假设我的inventory应用程序是一个简单的bash脚本(
)。如何配置Ansible来调用inventory.sh
,并从中获取JSON?实际上,这个应用程序很可能是一个Java可执行文件(bash inventory.sh
),但我认为如果我能想出如何让它与bash一起工作,我就可以推断出Java;及inventory.jar
- Ansible实际上是如何从应用程序捕获/获取JSON的<代码>标准输出?这一切都应该在HTTP连接上发生吗?例子?
或inventory.sh
如何将JSON传回Ansibleinventory.jar
- 这完全是用户定义的。通常,您会用Python编写动态清单,并使用输出的json转储来创建清单
下面是您提到的用例(vSphere)的一个示例:
简而言之,您可以像普通Python文件一样创建它,创建选项(就像他在main中所做的那样),并根据传递的选项选择性地执行函数。它们将进行REST调用,并以JSON转储的形式返回输出,Ansible可以对其进行解析,以便在清单中使用 这完全是用户定义的。通常,您会用Python编写动态清单,并使用输出的json转储来创建清单 下面是您提到的用例(vSphere)的一个示例:
简而言之,您可以像普通Python文件一样创建它,创建选项(就像他在main中所做的那样),并根据传递的选项选择性地执行函数。它们将进行REST调用,并以JSON转储的形式返回输出,Ansible可以对其进行解析,以便在清单中使用 清单脚本必须位于运行Ansible的同一台计算机上。它不是通过http进行通信,Ansible只需解析程序的
STDOUT
。位置根本不重要,调用Ansible时必须传递Ansible的路径:
ansible-playbook ... -i /path/to/your/inventory.sh
要避免每次都通过库存位置,请执行以下操作:
您也可以将脚本复制到/etc/ansible/hosts
,这是ansible将查找清单文件/脚本的默认位置,但我更喜欢将它们放在一起,因此我建议将其放在靠近您的剧本/角色等的位置
(3)是否在任何地方记录了这些信息?在Ansible文档中看不到任何内容
本页未提及,但可在本页的一些示例中看到。这些文档是由社区管理的,有时几乎没有结构化,缺少重要信息
顺便说一句,里面有一个脚本。通过查看源代码,我看到它导入了一些vSphere内容。我对VMware没有什么经验,因此无法判断这是否是您真正需要的,也不需要自己编写。清单脚本必须位于Ansible运行的同一台机器上。它不是通过http进行通信,Ansible只需解析程序的
STDOUT
。位置根本不重要,调用Ansible时必须传递Ansible的路径:
ansible-playbook ... -i /path/to/your/inventory.sh
要避免每次都通过库存位置,请执行以下操作:
您也可以将脚本复制到/etc/ansible/hosts
,这是ansible将查找清单文件/脚本的默认位置,但我更喜欢将它们放在一起,因此我建议将其放在靠近您的剧本/角色等的位置
(3)是否在任何地方记录了这些信息?在Ansible文档中看不到任何内容
本页未提及,但可在本页的一些示例中看到。这些文档是由社区管理的,有时几乎没有结构化,缺少重要信息
顺便说一句,里面有一个脚本。通过查看源代码,我看到它导入了一些vSphere内容。我对VMware没有什么经验,因此我无法判断这是否是您真正需要的,也不需要自己编写。谢谢@kcrumpto(+1)-该脚本确实有帮助,但仍然没有解决我的主要问题:(1)如何配置Ansible以使用此Python脚本/应用程序获取动态主机列表?以及(2)此脚本/应用程序如何将JSON通信回?你提到了JSON转储,我想你的意思是?如果是这样,那么脚本似乎只是将JSON转储发送到
STDOUT
,那么这是否意味着Ansible正在挂接STDOUT
?除了STDOUT
,这里还有其他选项吗?以及(3)是否在任何地方记录了这些选项?在Ansible文档中看不到任何内容…感谢@kcrumpto(+1)-该脚本确实有帮助,但仍然没有解决我的主要问题:(1)如何配置Ansible以使用此Python脚本/应用程序获取动态主机列表?以及(2)此脚本/应用程序如何将JSON通信回?你提到了JSON转储,我想你的意思是?如果是这样,那么脚本似乎只是将JSON转储发送到STDOUT
,那么这是否意味着Ansible正在挂接STDOUT
?除了STDOUT
,这里还有其他选项吗?以及(3)是否在任何地方记录了这些选项?在Ansible文档中看不到任何东西…太棒了,完美的答案@udondan!非常感谢。真棒,完美的回答@udondan!非常感谢。