2016-02-08 13 views
6

Gibt es eine Möglichkeit, einen relativen Pfad in Ansible auszuwerten?Übergeordnetes Verzeichnis in Ansible erhalten?

tasks: 
    - name: Run docker containers 
    include: tasks/dockerup.yml src_code='..' 

Im Wesentlichen bin ich daran interessiert, den Quellcode-Pfad zu meiner Aufgabe zu übergeben. Es passiert, dass der Quellcode der übergeordnete Pfad von {{ansible_inventory}} ist, aber es scheint nichts zu sein, um das out of the box zu erreichen.

---- weitere Informationen ----

Projektstruktur:

myproj 
    app 
    deploy 
    deploy.yml 

So versuche ich app von deploy.yml zuzugreifen.

Antwort

10

Ich habe mir nur die Quelle angesehen und einen Filter gefunden, von dem ich nichts wusste. vorherige String-Operationen vergessen, dann ist es ganz einfach:

{{ inventory_dir | dirname }} 

Other Useful Filters


Zurück Antwort:

Dies sollte es tun:

{{ inventory_dir.split("/")[0:-1]|join("/") }} 

Zurück Antwort:

Funktioniert {{ inventory_dir }}, was Sie wollen?

Auch erhältlich, inventory_dir ist der Pfadname des Verzeichnisses hält ansible Inventar Host-Datei

Oder wenn Sie von „parent directory“ den Pfad der Rolle Ihre Aufgabe in ist, bedeutet, {{ role_path }} könnte das tun Trick.

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

Von http://docs.ansible.com/ansible/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

+0

Hallo, ich habe die Frage ein wenig bearbeitet, um zu zeigen, wonach ich suche. Ich brauche den Eltern von 'inventory_dir' als einen vollständigen Pfad. – Pithikos

0

OK, ist eine Abhilfe für dieses nur eine separate Aufgabe zu verwenden:

tasks: 
    - name: Get source code absolute path 
    shell: dirname '{{inventory_dir}}' 
    register: dirname 
    - name: Run docker containers 
    include: tasks/dockerup.yml src_code={{dirname.stdout}} 

Dank mir udondan auf inventory_dir für anspielend.

1

Sie können {{playbook_dir}} für den absoluten Pfad zu Ihrem aktuellen Playbook-Lauf verwenden. Für mich ist das der beste Weg, weil Sie normalerweise wissen, wo sich Ihr Playbook befindet.

Verwandte Themen