Führen Sie die Aufgabe nur aus, wenn der Host keiner Gruppe angehört

106

Ich möchte eine ansible Aufgabe nur ausführen können, wenn der Host des aktuellen Playbooks nicht zu einer bestimmten Gruppe gehört. Im Semi-Pseudo-Code:

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

Wie soll ich das machen?

rgrinberg
quelle

Antworten:

198

Hier ist eine andere Möglichkeit, dies zu tun:

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

group_namesist eine magische Variable, wie hier dokumentiert: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#accessing-information-about-other-hosts-with-magic-variables :

Gruppennamen ist eine Liste (Array) aller Gruppen, in denen sich der aktuelle Host befindet.

Iskandar Najmuddin
quelle
3
+1 und wenn Sie das umgebende Zitat nicht einschließen, erhalten Sie den Fehler: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
Ich finde diesen Ansatz lesbarer und bequemer zu schreiben, aber beide funktionieren gleich gut. when: inventory_hostname not in groups.certain_groups
Liam
4
Diese Methode ist robuster als inventory_hostname in groups['groupname']in Fällen, in denen der Fugenmörtel selbst nicht vorhanden ist, gibt Ansible einen Fehler wie "Stellen Sie sicher, dass Ihr Variablenname keine ungültigen Zeichen wie '-' enthält: Argument vom Typ 'StrictUndefined' ist nicht iterierbar"
hamx0r
19

Sie können eine Steuervariable in VAR-Dateien festlegen, die sich in group_vars/oder direkt in der Hosts-Datei befinden:

[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

Und führen Sie Aufgaben wie diese aus:

- name: "test"
  command: "echo {{test_var}}"
  when: test_var is defined and test_var
nvartolomei
quelle
2
Die akzeptierte Antwort ist genauer für die Frage, aber dies führt Sie auf einen besseren Weg
nik.shornikov