2013-10-15 6 views
6

In meinem Textbuch ich ein local_action ausführen, die ein Skript ausführt und speichert den Wert für die zukünftige Verwendung:Erste ein Verzeichnis einer Aufgaben-Datei für relative Pfade

- local_action: command python release.py 
    register: release_url 

Dieser große gearbeitet, bis ich mein Textbuch in eine bewegte Unterverzeichnis. Es stellt sich heraus, dass der Befehl ausgeführt wird aus dem aktuellen Arbeitsverzeichnis (das Sie ansible aus ausgeführt werden), so dass der Pfad so aussehen muss:

- local_action: command python roles/ghost/release.py 

I wie unten eine Verzeichnisstruktur haben:

  • group_vars/
  • Rollen/
    • ghost/
      • Aufgaben/
        • main.yml
      • templates/
      • release.py
  • site.yml

jedoch die Rollen/Geister Ordnernamen ändern kann (und Hard-Coding dies lässt Sie das Playbook nicht aus einem anderen Verzeichnis ausführen).

Wie kann ich den Verzeichnispfad von tasks/main.yml (der den Befehl local_action ausgibt) abrufen, damit ich einen relativen Pfad angeben kann?

Antwort

2

Können Sie setzen release.py Skript in Rollen/Geist/files/und dann verwenden, mit local_action

- name: local scrpt 
    local_action: script release.py 

Und auf diese Weise können Sie nicht den Verzeichnispfad

Dies macht Referenz erhalten müssen zu tun dies im Verzeichnis Layout Teil http://www.ansibleworks.com/docs/playbooks_best_practices.html

0

Ich reichte eine pull request, bevor ich diese SO Frage sah, aber hier ist der Kern davon.

  1. Verschieben Sie das Skript in ein Verzeichnis ‚Dateien‘ in der Rolle
  2. Da wir nicht in welchen Weg das Skript sein wird, wissen können, kopieren Sie sie in/tmp:

    - name: copy ghost release script to tmp 
        local_action: copy src=release.py dest=/tmp/release.py 
        sudo: no 
    
  3. dann können wir das Skript ausführen

    - name: get ghost release version 
        local_action: command python /tmp/release.py 
        register: ghost_release 
        sudo: no 
    

wirwählenfür den Fall, dass das äußere Playbook global auf on gesetzt wird. Wir benötigen für diese Aktion keinen Root und können den laufenden Lauf unterbrechen, wenn Sie nach einem Passwort fragen müssen.

Es kann auch einen besseren Weg geben, Schritt 2 zu tun, indem Sie den Dateinamen willkürlich durch Verwendung eines Fakts zufügen und dann die Datei in einem zusätzlichen Schritt entfernen, nachdem wir das Skript ausgeführt haben. Dies kann das Risiko minimieren, dass eine Datei namens /tmp/release.py bereits existiert.