【问题标题】:Custom dynamic inventory scripts/plugins in AnsibleAnsible 中的自定义动态清单脚本/插件
【发布时间】:2015-08-18 21:19:31
【问题描述】:

Ansible allows devs 编写程序(以任何语言),将返回描述当前主机的动态“快照”的 JSON。我用的是vSphere,Ansible OSS目前不支持,所以需要写这样一个“自定义库存插件”。

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

文档完全(看似)失败的地方是:

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

【问题讨论】:

    标签: json ansible inventory vsphere


    【解决方案1】:

    清单脚本必须位于运行 Ansible 的同一台机器上。它不通过 h​​ttp 进行通信,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 页面上的一些示例中可以看到。这些文档是由社区管理的,而且有时很少有非结构化且缺乏重要信息。

    顺便说一句,其中包含一个VMware inventory 脚本。通过查看源代码,我看到它导入了一些 vSphere 的东西。我对 VMware 的经验很少,所以我无法判断这是否真的是您需要的,也不需要自己编写。

    【讨论】:

    • 太棒了,完美的答案@udondan!谢谢!
    【解决方案2】:

    这是完全由用户定义的。通常,您会在 Python 中编写动态清单,并使用输出的 json 转储来创建清单。

    这是您提到的用例 (vSphere) 的示例:https://github.com/RaymiiOrg/ansible-vmware/blob/master/query.py

    简而言之,您可以像创建普通 Python 文件一样创建它并创建选项(就像他在 ma​​in 中所做的那样)并根据传递的选项选择性地执行函数。这些将进行 REST 调用并以 JSON 转储的形式返回输出,Ansible 可以对其进行解析以用于库存。

    【讨论】:

    • 感谢@kcrumpto (+1) - 该脚本确实有帮助,但仍不能解决我的主要问题:(1) 如何配置 Ansible 以使用此 Python 脚本/应用程序获取动态主机列表? (2) 这个脚本/应用程序如何将 JSON 传回?您提到了 JSON 转储,我假设您的意思是 this?如果是这样,看起来脚本只是将 JSON 转储发送到 STDOUT,那么这是否意味着 Ansible 正在挂钩 STDOUT?除了STDOUT,这里还有其他选择吗?
    • 以及 (3) any 是否记录在案,anywhere?在 Ansible 文档中看不到任何内容...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多