Ansible 中的自定义动态清单 scripts/plugins
Custom dynamic inventory scripts/plugins in Ansible
Ansible allows devs
编写程序(用任何语言) return JSON 描述当前主机的动态“快照”。我用的是vSphere,目前Ansible OSS不支持,所以需要写这样一个“custom inventory plugin”。
我可以处理 vSphere 的主机列表查询,以及构建与 Ansible 预期兼容的 JSON。
文档完全(看似)不一致的地方是:
- 如何将 Ansible 与我的库存应用程序“连接”起来?也就是说,假设我的库存应用程序是一个简单的 bash 脚本 (
inventory.sh
)..我如何配置 Ansible 来调用 bash inventory.sh
并从中获取 JSON?实际上,该应用程序可能是一个 Java 可执行文件 (inventory.jar
),但我认为如果我能弄清楚如何让它与 bash 一起工作,我可以推断出 Java;和
- Ansible 实际上如何 capture/fetch JSON 从应用返回?
STDOUT
?这一切都应该通过 HTTP 连接发生吗?例子? inventory.sh
或 inventory.jar
如何将 JSON 传回 Ansible?
这完全是用户定义的。通常,您会在 Python 中编写动态清单并使用输出的 json 转储来创建清单。
这是您提到的用例 (vSphere) 的示例:https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py
简而言之,您可以像普通 Python 文件一样创建它并创建选项(就像他在 main 中所做的那样)并根据选项有选择地执行函数通过。这些将进行 REST 调用和 return 以 JSON 转储形式的输出,Ansible 可以解析它以用于清单。
库存脚本必须位于 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 查找库存的默认位置 files/scripts,但我更喜欢将所有东西放在一起,所以我建议将它放在靠近您的位置playbooks/roles等
And (3) Is any of this documented, anywhere? Don't see anything in the Ansible docs...
页面上没有提到Developing Dynamic Inventory Sources but it is to be seen on some examples on the page Dynamic Inventory。这些文档由社区管理,有时会变得松散且缺乏重要信息。
顺便说一句,其中包含一个 VMware inventory 脚本。通过查看源代码,我发现它导入了一些 vSphere 的东西。我对 VMware 没有什么经验,所以我无法判断这是否真的是您所需要的并且不需要自己编写。
Ansible allows devs 编写程序(用任何语言) return JSON 描述当前主机的动态“快照”。我用的是vSphere,目前Ansible OSS不支持,所以需要写这样一个“custom inventory plugin”。
我可以处理 vSphere 的主机列表查询,以及构建与 Ansible 预期兼容的 JSON。
文档完全(看似)不一致的地方是:
- 如何将 Ansible 与我的库存应用程序“连接”起来?也就是说,假设我的库存应用程序是一个简单的 bash 脚本 (
inventory.sh
)..我如何配置 Ansible 来调用bash inventory.sh
并从中获取 JSON?实际上,该应用程序可能是一个 Java 可执行文件 (inventory.jar
),但我认为如果我能弄清楚如何让它与 bash 一起工作,我可以推断出 Java;和 - Ansible 实际上如何 capture/fetch JSON 从应用返回?
STDOUT
?这一切都应该通过 HTTP 连接发生吗?例子?inventory.sh
或inventory.jar
如何将 JSON 传回 Ansible?
这完全是用户定义的。通常,您会在 Python 中编写动态清单并使用输出的 json 转储来创建清单。
这是您提到的用例 (vSphere) 的示例:https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py
简而言之,您可以像普通 Python 文件一样创建它并创建选项(就像他在 main 中所做的那样)并根据选项有选择地执行函数通过。这些将进行 REST 调用和 return 以 JSON 转储形式的输出,Ansible 可以解析它以用于清单。
库存脚本必须位于 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 查找库存的默认位置 files/scripts,但我更喜欢将所有东西放在一起,所以我建议将它放在靠近您的位置playbooks/roles等
And (3) Is any of this documented, anywhere? Don't see anything in the Ansible docs...
页面上没有提到Developing Dynamic Inventory Sources but it is to be seen on some examples on the page Dynamic Inventory。这些文档由社区管理,有时会变得松散且缺乏重要信息。
顺便说一句,其中包含一个 VMware inventory 脚本。通过查看源代码,我发现它导入了一些 vSphere 的东西。我对 VMware 没有什么经验,所以我无法判断这是否真的是您所需要的并且不需要自己编写。