Ansible

在 Ansible 動態清單 JSON 中,我可以根據主機名“呈現”主機變數嗎?

  • June 6, 2015

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

引用自:https://unix.stackexchange.com/questions/205479