Gibt es eine ansible-Variable, die den absoluten Pfad zum aktuellen ansible-Playbook hat, das ausgeführt wird?
Kontext:
Ich führe / erstelle ein ansible-Skript localhost
, um einen MySQL-Docker zu konfigurieren, und möchte das Datenvolumen relativ zum ansible-Skript bereitstellen.
Nehmen wir zum Beispiel an, ich habe ein Repository ausgecheckt ~/branch1/
und dann ausgeführt. ansible-playbook dev.yml
Ich dachte, es sollte das Volume speichern ~/branch1/.docker_volume/
. Wenn ich es ausgeführt ~/branch2
habe, sollte es das Volume auf konfigurieren ~/branch2/.docker_volume/
.
Antworten:
Sie können eine
playbook_dir
Variable verwenden.quelle
playbook_dir
Variable dokumentiert ist. Könnten Sie mich bitte auf die Dokumentation verweisen? ODER können Sie erklären, wie Sie von dieser Variablen erfahren haben?Es scheint keine Variable zu geben, die genau das enthält, was Sie wollen.
Zitieren Sie jedoch die Dokumente :
Abhängig von Ihrem Setup können diese oder die
$ pwd
basierte Lösung ausreichen.quelle
Leider nicht. Tatsächlich ist der absolute Pfad im Zusammenhang mit der Ausführung von Ansible etwas bedeutungslos (und möglicherweise verwirrend). Kurz gesagt, wenn Sie ein Playbook aufrufen, kopiert Ansible für jede Aufgabe das mit der Aufgabe verknüpfte Modul physisch in ein temporäres Verzeichnis auf dem Zielcomputer und ruft dann das Modul mit den erforderlichen Parametern auf. Der absolute Pfad auf dem Zielcomputer ist also nur ein temporäres Verzeichnis, das nur wenige temporäre Dateien enthält und nicht einmal das vollständige Playbook enthält. Außerdem ist es auf einem Zielcomputer praktisch nutzlos, einen vollständigen Pfad einer Datei auf dem Ansible-Server zu kennen, es sei denn, Sie replizieren Ihren gesamten Ansible-Verzeichnisbaum auf den Zielen.
Um alle von Ansible definierten Variablen anzuzeigen, können Sie einfach den folgenden Befehl ausführen :
Was ist der Grund, warum Sie denken, dass Sie den absoluten Weg zum Spielbuch kennen müssen?
quelle
local_action
Modul hat, bedeutet, dass es dafür legitime Anwendungsfälle gibt.Ich habe ein solches Spielbuch verwendet, um meine Rollen lokal zu testen:
Dies funktionierte jedoch nicht mehr mit Ansible v2.2.
Ich habe die oben genannte Lösung von getestet
und es produzierte mein Home-Verzeichnis und nicht das "aktuelle Arbeitsverzeichnis"
Ich habe mich mit abgefunden
gemäß der obigen Lösung.
quelle
Zu diesem Zweck gibt es keine eingebaute Variable, aber Sie können den absoluten Pfad des Playbooks jederzeit mit dem Befehl "pwd" ermitteln und seine Ausgabe in einer Variablen registrieren.
Jetzt ist der Pfad in der Variablen playbook_path_output.stdout verfügbar
quelle
pwd
wird der Pfad des Playbook-Skripts nicht zurückgegeben. Es gibt (normalerweiseansible-playbook
) das aktuelle Verzeichnis des Prozesses zurück . Die beiden müssen nicht gleich sein und hängen davon ab, wie genau ansible aufgerufen wurde.debug: var=ansible_env.PWD
(Dies gibt mir das Verzeichnis, aus dem ichansible-playbook
auf meinem lokalen Computer ausgeführt habe, und das Home-Verzeichnis auf Remote-Servern){{ lookup('env','PWD') }}