2017-08-31 1 views
0

Ich versuche, dies nur für meine Dev- und Hydra-Server zu erreichen. Ich habe 2 Host-Dateien mit Hosts in ihnen. Die Hostgruppe dev-all ist [dev-all:children] dev-group1 dev-group2 Ansible - Verwenden eines logischen ODER zum Abgleichen von Hostgruppen

Die Hydra-Gruppe enthält nur einen Server, befindet sich jedoch in einer anderen Host-Datei. Wenn ich Ansible benutze, verwende ich einen Befehl wie diesen für die Hydra-Gruppe ansible-playbook -i environments/hydra site.yml und für Dev-Gruppen verwende ich diesen Befehl ansible-playbook -i environments/dev site.yml.

Meine Frage ist, wie bekomme ich das, wenn Bedingung nur für Hydra gelten, wenn ich Hydra oder nur Dev-all aufrufen, wenn ich dev aufrufen? Dies würde mir helfen, das Hinzufügen dieser Gruppe zu Prod-Servern in einer anderen Host-Datei zu vermeiden. Die dev-all-Gruppe enthält viele dev-Servergruppen in der dev-Datei, und ich versuche im Grunde, sie alle aus der Host-Datei aufzunehmen, also habe ich die dev-all: children-Gruppe erstellt, um alle zu erfassen.

Ich kann nicht scheinen, sie zu erhalten, um die OR-Bedingung zu entsprechen. Vielleicht gibt es eine bessere Möglichkeit, die when-Anweisung zu schreiben.

- name: add dev environment sudo user group group: name=dev_sudo state=present gid=8002 tags: - groups - sudo-group when: (inventory_hostname in groups["dev-all"]) or (inventory_hostname in groups['hydra'])

Antwort

2

können Sie group_names verwenden, die eine Liste (Array) aller Gruppen auf dem aktuellen Host befindet. Siehe magic variables.

Like:

when: ('dev-all' in group_names) or ('hydra' in group_names) 

oder:

when: ['dev-all', 'hydra'] | intersect(group_names) | count > 0 
+0

Das hat geklappt! Vielen Dank! Gibt es eine Möglichkeit, es auf eine ganze Task-Datei statt auf eine bestimmte Instanz anzuwenden? Wie haben Sie eine main.yml, hydra.yml, dev-web1.yml usw. Auf diese Weise müssen Sie kein When Conditional wie oben für alles in dieser Datei tun? –

+1

Erstellen Sie separate XML-Dateien und verwenden Sie 'include' +' when' in main.yml. –

+0

Können Sie bitte ein Beispiel geben? Ich verstehe, dass das 'include' in der main.yml platziert ist, aber wie würde ich die 'wann'-Bedingung für alle Elemente in der enthaltenen YML-Datei bekommen? –

Verwandte Themen