我的主机和相应的hostvars作为JSON输入给出。如何在Playbook中使用它们

时间:2018-07-18 11:56:13

标签: ansible hosts ansible-inventory

我的情况类似于以下示例。

[atlanta]
host1 http_port=80   maxRequestsPerChild=808
host2 http_port=303  maxRequestsPerChild=909

我有不同的主机,每个主机的maxRequestsPerChild参数都有一个特定的值。

如果这是一个静态主机文件,则可以在每个主机中获取maxRequestsPerChild的值。

但是我需要将主机和maxRequestsPerChild动态传递为JSON。 如何构造JSON并在我的剧本中访问JSON?

1 个答案:

答案 0 :(得分:0)

Ansible不直接支持JSON文件形式的清单。 但是,它完全支持清单脚本返回JSON。

这是官方文档的链接,还描述了预期的输出格式:https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html

您可能要实现更新的清单格式,这是更快的方法,并且显式地允许每个主机的变量,如https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html#tuning-the-external-inventory-script

部分所述

在这种情况下,您的脚本将返回以下输出:

    {
        "_meta": {
            "hostvars": {
                "host1": {
                    "http_port": 80,
                    "maxRequestsPerChild": 808
                },
                "host2": {
                    "http_port": 303,
                    "maxRequestsPerChild": 909
                }
            }
        },
        "atlanta": {
            "hosts": [ "host1", "host2" ]
        }
    }