Json Ansible中的自定义动态清单脚本/插件

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

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

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

文档完全(似乎)平淡的地方是:

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

    • 这完全是用户定义的。通常,您会用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!非常感谢。