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
}
}