No JSON do inventário dinâmico Ansible, posso “renderizar” hostvars com base no hostname?

2

A documentação do Ansible fornece um exemplo aqui sobre como devolver um inventário no formato 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" ]
}

e adicionando abaixo disso, que os hostvars para um único host podem ser configurados usando:

{

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

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

}

Agora estou usando o Ansible 1.9.1 e gostaria de usar hostvars ou hosts individuais. No entanto, alguns dos hostvars seguem um padrão. O mais destacado ansible_ssh_host seguirá um padrão *.mydomain.tld , lá o curinga é substituído pelo nome abreviado do host.

Existe uma maneira de encurtar o JSON dando um padrão que será renderizado como um modelo Jinja2, por exemplo? Ajustando parte do exemplo acima:

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

Algo como possível com o formato que o Ansible espera? Eu não encontrei documentação mencionando isso.

    
por 0xC0000022L 25.05.2015 / 12:27

1 resposta

4

Você pode usar inventory_hostname mágica variáveis neste caso.

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

Tags