Ansible preenchendo uma variável com base no hostname

1

Eu pesquisei no Google, mas não consigo encontrar uma solução para o que estou tentando fazer.

Eu quero definir uma variável jinja2 com base no nome do host de um servidor (estou usando certs diferentes e quero ter ansible criar o ssl.conf com base no nome do host).

Gostaria que um dict fizesse algo como:

Certmapping:
  host1: www.mydomain.com
  host2: beta.mydomain.com
  host3: partner.mydomain.com

E, em seguida, um modelo que faz referência ao dict assim:

SSLCertificateFile /etc/pki/tls/certs/<domain>.crt

Eu poderia ter um monstro:

if {{ ansible_hostname }} == 'host1' ...

Mas isso parece menos elegante.

    
por Tom 18.12.2016 / 04:19

2 respostas

3

Continuando com a sugestão do incansável @ michaelhampton, veja como você usa host_vars

project root
-- host_vars
   -- host1.yml
   -- host2.yml
   -- host3.yml
-- my_playbook.yml

Então, quando você configura o host1.yml, basta colocar o valor necessário:

---
Certmap: www.mydomain.com

E quando você precisar acessá-lo, basta se referir a ele como:

{{ Certmap }}

Ele será alterado para hosts diferentes, desde que cada host tenha um arquivo host_vars com Certmap definido.

    
por 18.12.2016 / 22:51
0

Dado seu dicionário Certmapping , use o seguinte:

- set_fact:
    certificate_configuration_line: "SSLCertificateFile /etc/pki/tls/certs/{{Certmapping[ansible_hostname]}}.crt"

( set_fact é apenas um exemplo, você pode usar a referência diretamente em lineinfile ou um modelo Jinja2)

    
por 19.12.2016 / 07:25

Tags