Ich versuche meinen Weg aus einem Abhängigkeitsdickicht zu finden. Ich benutze Ansible 1.9.2.Führe immer eine ansible Rolle vor einer anderen Rolle
In einem einzigen Playbook möchte ich in der Lage sein, eine Galaxy-Rolle (in dem Fall die Rolle Datadog.datadog) zu installieren und zu konfigurieren. Aber Ansible barrt immer; Da die Datadog.datadog-Rolle nicht existiert, bis eine andere Rolle, die ich geschrieben habe, die Galaxy-Rolle installiert, wird sie nicht ausgeführt. Dies ist, wie ich wirklich würde, wie es zu sein, die anderen Rollen Ausschneiden, dass mein Textbuch verwendet:
- hosts: all
roles:
- install_datadog
- (some other roles...)
- { role: Datadog.datadog, sudo: true }
vars:
datadog_api_key: "somekey"
ich alle folgenden versucht habe, und keiner von ihnen arbeiten, um die ansible Galaxy Datadog.datadog für die Installation Rolle zuerst:
Das Definieren einer Rollenabhängigkeit macht keinen Sinn, da Datadog.datadog noch nicht existiert, daher kann ich keine Abhängigkeiten darin definieren. Es gibt immer ein Fehler verwandt dies:
ERROR: cannot find role in /etc/ansible/roles/Datadog.datadog
Das einzige, was ich an die Arbeit kann in einem vorherigen Lauf der install_datadog Rolle ausführt. Dies ist keine großartige Lösung, da zuvor ein Playbook mit vielen Ausführungsblöcken und Rollenaufrufen die gesamte Umgebung konfiguriert hat. dies würde die Ausführung von zwei Spielbüchern in einer bestimmten Reihenfolge erfordern, was sehr unelegant ist.
Wie kann ich also in einer einzelnen Ausführung eine Galaxy-Rolle auflösen, die nicht existiert, bis eine frühere Rolle ausgeführt wurde, um sie zu installieren?
Warum benötigen Sie die Rolle jedes installieren Zeit? Arbeiten Sie Ansible im Pull-Modus? – ydaetskcoR
Ich muss die Rolle nicht jedes Mal installieren, aber immer wenn dieses Playbook läuft (es ist im Wesentlichen das "configure/reconfigure the environment" playbook), sollte es sicherstellen, dass die Rolle da ist. Und es ist idempotent, also ist das "install_" in seinem Titel vielleicht etwas irreführend. – maxn
Ich bin verwirrt von Ihrem Workflow. Ich verwende Galaxy überhaupt nicht, also nicht sicher, wie es sich auf deinen Workflow auswirkt, aber normalerweise speicherst du alle deine Ansible-Spiele und Rollen in der Quellcodeverwaltung und die gezogene Galaxy-Rolle sollte nicht anders sein. Sobald Sie die Rolle zum ersten Mal in Ihrem Quellcodeverwaltungsrepository abgerufen haben, führen Sie Ihre anderen Wiedergaben für diese Kopie aus. – ydaetskcoR