Jalankan tugas hanya jika tuan rumah tidak termasuk dalam grup

106

Saya ingin menjalankan tugas yang mungkin hanya jika host dari pedoman saat ini bukan milik grup tertentu. Dalam kode semi pseudo:

- name: my command
  command: echo stuff
  when: "if {{ ansible_hostname }} not in {{ ansible_current_groups }}"

Bagaimana saya harus melakukan ini?

rgrinberg.dll
sumber

Jawaban:

198

Berikut cara lain untuk melakukannya:

- name: my command
  command: echo stuff
  when: "'groupname' not in group_names"

group_namesadalah variabel ajaib seperti yang didokumentasikan di sini: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

group_names adalah daftar (larik) dari semua grup tempat host saat ini berada.

Iskandar Najmuddin
sumber
3
+1 dan jika Anda tidak menyertakan kutipan di sekitarnya, Anda mendapatkan kesalahan:This one looks easy to fix. It seems that there is a value started with a quote, and the YAML parser is expecting to see the line ended with the same kind of quote.
Peter Ajtai
3
Saya menemukan pendekatan ini lebih mudah dibaca dan nyaman untuk ditulis, tetapi keduanya bekerja sama baiknya. when: inventory_hostname not in groups.certain_groups
Liam
4
Cara ini lebih kuat daripada inventory_hostname in groups['groupname']karena dalam kasus di mana grout itu sendiri tidak ada, Ansible akan menampilkan kesalahan seperti "Pastikan nama variabel Anda tidak berisi karakter yang tidak valid seperti '-': argumen jenis 'StrictUndefined' tidak dapat diulang"
hamx0r
20

Anda dapat mengatur variabel kontrol di file vars yang terletak di group_vars/atau langsung di file hosts seperti ini:

[vagrant:vars]
test_var=true

[location-1]
192.168.33.10 hostname=apollo

[location-2]
192.168.33.20 hostname=zeus

[vagrant:children]
location-1
location-2

Dan jalankan tugas seperti ini:

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var
nvartolomei
sumber
2
jawaban yang diterima lebih akurat untuk pertanyaan tersebut, tetapi ini membawa Anda ke jalan yang lebih baik
nik.shornikov