Ich habe ein Spielbuch, das ungefähr so aussieht:
---
- hosts: group1
roles:
- role1
- role2
- hosts: group2
roles:
- role2
- role3
Angenommen, ich habe eine Hosts-Datei mit einem Eintrag wie dem folgenden:
[group1]
host1.example.com
[group2]
host1.example.com
Ansible führt die Aufgaben in Rolle2 ZWEIMAL für host1.example.com aus, da sie in zwei Gruppen angezeigt werden und jeder Rolle2 zugewiesen ist.
Wie kann ich Ansible klar machen, dass dieselbe Rolle zweimal enthalten ist und daher nur einmal ausgeführt werden sollte?
Antworten:
Wie bereits erwähnt, ist dies beabsichtigt. Ansible führt jeweils nur ein Spiel aus. Ihr Playbook besteht aus zwei Spielen (die beiden Elemente in der YAML-Liste auf Stammebene, die durch die Playbook-Datei definiert sind). Das erste Spiel wendet Rolle1 und Rolle2 auf Gruppe1 an. Dieses Spiel wird zuerst ausgeführt, und erst wenn es beendet ist, beginnt das zweite Spiel. Ansible versucht jedoch nicht, die Spiele logisch zusammenzuführen. Schließlich möchten Sie möglicherweise, dass die Aufgaben in Rolle2 zweimal ausgeführt werden.
Um das Problem zu beheben, gibt es einige Möglichkeiten, wie Sie dies umgehen können. Welche Sie auswählen, hängt von den Details der Gruppen und Rollen ab.
Wenn alle Aufgaben in Rolle2 idempotent sind, dh wenn sie mehrmals ausgeführt werden können und jedes Mal das gleiche Ergebnis erzielen, verlieren Sie nur Zeit, und es ist in Ordnung, die Rollen wiederholen zu lassen. Wenn die Bewerbung der Rollen sehr lange dauert oder wenn Sie sie nicht idempotent machen können, sollten Sie die folgenden Ideen berücksichtigen:
Sie können das Spielbuch in drei Spiele aufteilen und die Rollen einzeln anwenden:
Wenn Ihre Rollen zusammen gruppiert werden müssen, können Sie eine dritte Gruppe für die Server erstellen, die alle drei Rollen benötigen. Sie müssen sie nicht aus den beiden anderen Gruppen herausnehmen. Sie können die Gruppe in Ihrer Inventardatei wie folgt erstellen:
Dann könnten Sie in Ihrem Spielbuch wieder in drei Spiele aufteilen, aber die dritte Gruppe verwenden, um zu vermeiden, dass Rollen erneut ausgeführt werden:
Das ist ziemlich hässlich, kann aber in einigen Fällen nützlich sein.
quelle
Dies ist beabsichtigt. Der einzige Weg wäre, Rolle2 nur in einem Spielbuch auf eine bestimmte Gruppe anzuwenden und Rolle2 nicht in einem anderen Spielbuch einer Gruppe zu verwenden, die möglicherweise gemeinsame Mitglieder hat, wie hier.
quelle