ansible run global variable

6

Eu quero criar um cluster de servidores, usando ansible.

Em um dos principais livros, incluo alguns sub-playbooks.

- include: playbook_commandserver.yml
- include: playbook_agent.yml

No playbook_commandserver.yml, eu crio o servidor de comando (em aws). Então, eu disparo uma função, que usa o módulo set_fact para lembrar o nome do dns do servidor de comandos:

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

O commandserver fact está disponível no mesmo jogo, mas não no mesmo manual. e muito menos no playbook_agent.yml , que é incluído posteriormente. E é exatamente lá, onde eu precisaria acessar esse fato do servidor de comandos.

Então, como um set / store variáveis, que são válidas para o ansible-run completo?

Eu encontrei isto: link No entanto, para mim isso parece um hack feio.

Não há melhor solução para este problema? Não há como definir uma variável, que é válida para todo o ansible-run?

    
por doh-nutz 05.08.2016 / 11:53

1 resposta

9

Sim, isso é possível. Quando você define um fato com o módulo set_fact , esse fato é acessível por meio de "hostvars". Então, se você definir sua variável como: assim:

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

então você pode acessar essa variável em outros playbooks incluídos do mesmo jogo dessa maneira (o módulo de depuração é apenas um exemplo):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
    
por 05.08.2016 / 14:08