在 Ansible 动态清单 JSON 中,我可以根据主机名“渲染”主机变量吗?

在 Ansible 动态清单 JSON 中,我可以根据主机名“渲染”主机变量吗?

Ansible 文档给出了一个例子这里关于如何以 JSON 格式返回库存:

{
    "databases"   : {
        "hosts"   : [ "host1.example.com", "host2.example.com" ],
        "vars"    : {
            "a"   : true
        }
    },
    "webservers"  : [ "host2.example.com", "host3.example.com" ],
    "atlanta"     : {
        "hosts"   : [ "host1.example.com", "host4.example.com", "host5.example.com" ],
        "vars"    : {
            "b"   : false
        },
        "children": [ "marietta", "5points" ]
    },
    "marietta"    : [ "host6.example.com" ],
    "5points"     : [ "host7.example.com" ]
}

并在下面添加,可以使用以下命令设置单个主机的主机变量:

{

    # results of inventory script as above go here
    # ...

    "_meta" : {
       "hostvars" : {
          "moocow.example.com"     : { "asdf" : 1234 },
          "llama.example.com"      : { "asdf" : 5678 },
       }
    }

}

现在我正在使用 Ansible 1.9.1,并且想使用主机变量或单个主机。然而,一些主机变量遵循某种模式。最突出的ansible_ssh_host是遵循一种模式*.mydomain.tld,其中通配符被短主机名替换。

有没有办法通过提供一个将呈现为 Jinja2 模板的模式来缩短 JSON?调整上例部分内容:

{
    "atlanta"     : {
        "hosts"   : [ "host1", "host4", "host5" ],
        "vars"    : {
            "ansible_ssh_host" : "{{hostname}}.example.com",
            "b"   : false
        }
}

任何事物喜欢Ansible 期望的格式可能吗?我没有找到提到这一点的文档。

答案1

您可以使用inventory_hostname 魔法变量在这种情况下。

{
    "atlanta"     : {
        "hosts"   : [ "host1", "host4", "host5" ],
        "vars"    : {
            "ansible_ssh_host" : "{{inventory_hostname}}.example.com",
            "b"   : false
        }
}

相关内容