ansible eseguire la variabile globale


8

Voglio creare un cluster di server, usando ansible.

In un libro principale, includo alcuni libri secondari.

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

In playbook_commandserver.yml, creo il command-server (su aws). Quindi, innesco un ruolo, che utilizza il set_factmodulo per ricordare il nome DNS del server dei comandi:

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

Il commandserverfatto è disponibile nella stessa giocata, ma non nello stesso playbook .. figuriamoci nel playbook_agent.yml, che viene incluso, in seguito. Ed è esattamente lì, dove avrei bisogno di accedere a quel command server-fact.

Quindi, come si possono impostare / archiviare le variabili, che sono valide per l'intero ciclo di risposta?

Ho trovato questo: /programming/26732241/ansible-save-registered-variable-to-file Comunque per me questo sembra un brutto hack.

Non esiste una soluzione migliore a questo problema? Non c'è modo di impostare una variabile valida per l'intera sequenza di risposte?

Risposte:


12

Sì, questo è possibile. Quando si imposta un fatto con il set_factmodulo, questo fatto è accessibile tramite "hostvars". Quindi, se si definisce il server dei comandi variabile in questo modo:

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

quindi puoi accedere a questa variabile in altri playbook inclusi della stessa riproduzione in quel modo (il modulo di debug è solo un esempio):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.