mungkin menjalankan variabel global

8

Saya ingin membuat sekelompok server, menggunakan ansible.

Dalam satu main-playbook, saya memasukkan beberapa sub-playbook.

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

Di playbook_commandserver.yml, saya membuat command-server (on aws). Kemudian, saya memicu sebuah peran, yang menggunakan set_factmodul untuk mengingat nama dns server-perintah:

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

The commandserverBahkan tersedia dalam bermain yang sama, tetapi tidak dalam pedoman yang sama .. apalagi di playbook_agent.yml, yang akan disertakan, setelah itu. Dan itu persis di sana, di mana saya perlu mengakses fakta server-perintah itu.

Jadi bagaimana satu set / toko variabel, yang valid untuk menjalankan lengkap yang mungkin?

Saya telah menemukan ini: /programming/26732241/ansible-save-registered-variable-to-file Namun bagi saya ini terlihat seperti hack yang jelek.

Apakah tidak ada solusi yang lebih baik untuk masalah ini? Apakah tidak ada cara untuk mengatur variabel, yang valid untuk keseluruhan yang dijalankan?

doh-nutz
sumber

Jawaban:

12

Ya, ini mungkin. Saat Anda menetapkan fakta dengan set_factmodul, fakta ini dapat diakses melalui "hostvars". Jadi, jika Anda mendefinisikan server perintah variabel seperti:

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

maka Anda dapat mengakses variabel ini di playbook lain yang disertakan dari permainan yang sama dengan cara itu (modul debug hanyalah sebuah contoh):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
A.Hab
sumber