it-swarm.com.de

Variable, die den Pfad zum aktuell ausgeführten Ansible-Playbook enthält?

Gibt es eine ansible-Variable, die den absoluten Pfad zum aktuellen ansible-playbook hat, das gerade ausgeführt wird?

in irgendeinem Zusammenhang: Ich führe/erstelle ein Ansible-Skript für localhost aus, 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 auf ~/branch1/ Ausgecheckt und dann ansible-playbook dev.yml Ausgeführt. Ich dachte, es sollte das Volume auf ~/branch1/.docker_volume/ Speichern. Wenn ich es von ~/branch2 Aus gestartet habe, sollte es das Volume auf ~/branch2/.docker_volume/ Konfigurieren.

84
Josh Unger

Sie können playbook_dir Variable.

146
ctrlok

Es scheint keine Variable zu geben, die genau das enthält, was Sie wollen.

Zitat die docs :

Auch verfügbar, inventory_dir ist der Pfadname des Verzeichnisses, in dem sich Ansibles Inventar-Host-Datei befindet. inventory_file ist der Pfadname und der Dateiname, die auf die Host-Datei des Ansible-Inventars verweisen.

playbook_dir enthält das Playbook-Basisverzeichnis.

Und schlussendlich, role_path gibt den Pfadnamen der aktuellen Rolle zurück (seit 1.8). Dies funktioniert nur innerhalb einer Rolle.

Abhängig von Ihrem Setup, denen oder dem $ pwdbasierte Lösung könnte ausreichen.

38
Cray

Leider gibt es nicht. Tatsächlich ist der absolute Pfad im Zusammenhang mit der Ausführung von Ansible ein wenig 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 das Modul mit den erforderlichen Parametern auf. Der absolute Pfad auf dem Zielcomputer ist also nur ein temporäres Verzeichnis, das nur einige temporäre Dateien enthält und nicht einmal das vollständige Wiedergabebuch enthält. Außerdem ist es auf einem Zielcomputer so gut wie nutzlos, den 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:

$ ansible -m setup hostname

Was ist der Grund, warum Sie glauben, den absoluten Pfad zum Playbook zu kennen?

1
Bruce P

Ich habe ein Playbook wie dieses verwendet, um meine Rollen lokal zu testen:

---
- hosts: localhost
  roles:
     - role: .

dies funktionierte jedoch nicht mehr mit Ansible v2.2.

Ich habe die oben genannte Lösung von debuggt

---
- hosts: all
  tasks:
    - name: Find out playbooks path
      Shell: pwd
      register: playbook_path_output
    - debug: var=playbook_path_output.stdout

und es erzeugte mein Heimatverzeichnis und nicht das "aktuelle Arbeitsverzeichnis"

Ich habe mich damit abgefunden

---
- hosts: all
  roles:
    - role: '{{playbook_dir}}'

gemäß obiger Lösung.

1

Zu diesem Zweck gibt es keine eingebaute Variable. Sie können jedoch jederzeit den absoluten Pfad des Playbooks mit dem Befehl "pwd" ermitteln und seine Ausgabe in einer Variablen registrieren.

- name: Find out playbook's path
  Shell: pwd
  register: playbook_path_output
- debug: 
  debug: var=playbook_path_output.stdout

Jetzt ist der Pfad in der Variablen playbook_path_output.stdout verfügbar

0
hyt