Ansible
在 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 並且想使用 hostvars 或單個主機。但是,一些主機變數遵循一種模式。最突出
ansible_ssh_host
的將遵循一個模式*.mydomain.tld
,萬用字元被短主機名替換。例如,有沒有辦法通過提供將呈現為 Jinja2 模板的模式來縮短 JSON?調整上面例子的一部分:
{ "atlanta" : { "hosts" : [ "host1", "host4", "host5" ], "vars" : { "ansible_ssh_host" : "{{hostname}}.example.com", "b" : false } }
Ansible期望的格式可能有*類似的情況嗎?*我沒有找到提到這一點的文件。
在這種情況下,您可以使用
inventory_hostname
魔術變數。{ "atlanta" : { "hosts" : [ "host1", "host4", "host5" ], "vars" : { "ansible_ssh_host" : "{{inventory_hostname}}.example.com", "b" : false } }