variável global de execução possível


8

Eu quero criar um cluster de servidores, usando ansible.

Em um manual principal, incluo alguns sub-manuais.

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

No playbook_commandserver.yml, crio o comando-server (em aws). Em seguida, aciono uma função, que usa o set_factmódulo 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 commandserverfato está disponível na mesma peça, mas não na mesma cartilha. E muito menos na playbook_agent.yml, que é incluída depois. E é exatamente lá, onde eu precisaria acessar esse fato do servidor de comandos.

Então, como um conjunto / armazena variáveis ​​válidas para a execução completa do ansible?

Eu encontrei isso: /programming/26732241/ansible-save-registered-variable-to-file No entanto, para mim, isso parece um truque feio.

Não existe melhor solução para esse problema? Não há como definir uma variável que seja válida para toda a execução ansible?

Respostas:


12

Sim, isso é possível. Quando você define um fato com o set_factmódulo, esse fato é acessível através de "hostvars". Então, se você definir sua variável commanderver da seguinte maneira:

  - 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 da mesma peça dessa maneira (o módulo de depuração é apenas um exemplo):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.