Uruchom zadanie tylko wtedy, gdy host nie należy do grupy

107

Chciałbym móc uruchomić zadanie ansibla tylko wtedy, gdy host bieżącego playbooka nie należy do określonej grupy. W pseudokodzie:

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

Jak mam to zrobić?

rgrinberg
źródło

Odpowiedzi:

199

Oto inny sposób, aby to zrobić:

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

group_namesto magiczna zmienna, jak udokumentowano tutaj: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

nazwy_grup to lista (tablica) wszystkich grup, w których znajduje się bieżący host.

Iskandar Najmuddin
źródło
3
+1 i jeśli nie dodasz otaczającego cytatu, pojawi się błąd: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
Uważam, że to podejście jest bardziej czytelne i wygodne w pisaniu, ale oba działają równie dobrze. when: inventory_hostname not in groups.certain_groups
Liam
4
Ta metoda jest bardziej niezawodna niż inventory_hostname in groups['groupname']dlatego, że w przypadkach, gdy sama fuga nie istnieje, Ansible wyświetli błąd typu „Upewnij się, że nazwa zmiennej nie zawiera nieprawidłowych znaków, takich jak„ - ”: argument typu„ StrictUndefined ”nie jest iterowalny”
hamx0r
20

Możesz ustawić zmienną kontrolną w plikach vars znajdujących się w group_vars/lub bezpośrednio w pliku hosts w następujący sposób:

[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

I uruchamiaj takie zadania:

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var
nvartolomei
źródło
2
zaakceptowana odpowiedź jest dokładniejsza na pytanie, ale prowadzi cię to lepszą ścieżką
nik.shornikov