Kann ich den Handler in einer anderen Rolle benachrichtigen? Was soll ich tun, damit ansible es findet?
Der Anwendungsfall ist, z. B. möchte ich einen Dienst konfigurieren und ihn dann neu starten, wenn er geändert wird. Unterschiedliche Betriebssysteme müssen wahrscheinlich unterschiedliche Dateien bearbeiten, und selbst das Dateiformat kann unterschiedlich sein. Daher möchte ich sie in verschiedene Rollen einteilen (da das Dateiformat unterschiedlich sein kann, kann dies nicht durch Festlegen von group_vars erfolgen). Der Neustart des Dienstes erfolgt jedoch über das service
Modul. Deshalb möchte ich den Handler in eine common
Rolle versetzen .
Ist das sowieso zu erreichen? Vielen Dank.
ansible
ansible-playbook
Kan Li
quelle
quelle
Antworten:
Sie können auch Handler einer Abhängigkeitsrolle aufrufen . Kann sauberer sein als das Einfügen von Dateien oder das explizite Auflisten von Rollen in ein Playbook, nur zum Zweck der Beziehung zwischen Rollen. Z.B:
Rollen / meine-Handler / Handler / main.yml
Rollen / my-other / meta / main.yml
Rollen / meine-andere / Aufgaben / main.yml
quelle
v1.9.0.1
.my_handlers
Rolle definiert sind .Sie sollten dies tun können, wenn Sie die Handlerdatei einschließen.
Beispiel:
Aber ich finde es nicht elegant.
Ein eleganterer Weg ist ein Stück, das beide Rollen verwaltet, ungefähr so:
Dadurch können beide Rollen andere Handler aufrufen.
Aber auch hier würde ich vorschlagen, alles in einer Rolle zu machen und Dateien zu trennen und ein bedingtes Include zu verwenden: http://docs.ansible.com/playbooks_conditionals.html#conditional-imports
hoffentlich hilft das
quelle
Sie können zusätzliche Handler aus der
YourRole/handlers/main.yml
Datei importieren, indem Sie verwendenimport_tasks
.Also, wenn
MyRole
Bedarf Handler in einige nennenOtherRole
,roles/MyRole/handlers/main.yml
wird wie folgt aussehen:Natürlich
roles/MyRole/handlers/main.yml
können auch zusätzliche Handler enthalten sein.Auf diese Weise kann ansible Handler aus dem korrekt importieren und ausführen , wenn ich
MyRole
AufgabenOtherRole
ausführen möchte, ohne Aufgaben von der auszuführenOtherRole
quelle
Ich hatte ein ähnliches Problem, musste aber in den anderen abhängigen Rollen viele Maßnahmen ergreifen.
Anstatt den Handler aufzurufen, setzen wir eine Tatsache wie folgt:
Dann anderswo in einer anderen Rolle:
quelle
register
festzulegen. Eine Variable, die durchgesetzt wird, hat dieselbe Lebensdauer wie eine Tatsache.