2017-10-10 3 views
0

Ich versuche, eine Umgebungsvariable von Target Linux Host mit Ansible Playbook zu lesen. Ich habe alle folgenden Aufgaben wie im Dokument versucht, aber es gibt kein Ergebnis.Ansible - Lese-Umgebungsvariable von Remote-Host

- name: Test1  
    debug: msg="{{ ansible_env.BULK }}" 
    delegate_to: "{{ target_host }}" 

    - name: Test2 
    shell: echo $BULK 
    delegate_to: "{{ target_host }}" 
    register: foo 

    - debug: msg="{{ foo.stdout }}" 

    - name: Test3 
    debug: msg="{{ lookup('env','BULK')}} is an environment variable" 
    delegate_to: "{{ target_host }}" 

Die Umgebungsvariable „bulk“ wird in den lokalen Host nicht festgelegt, wo ich das Textbuch bin Ausführung, so nehme ich an seiner Rückkehr nichts. Anstelle von BULK, wenn ich "HOME" verwende, das immer verfügbar ist, gibt es das Ergebnis zurück. Wenn ich in den target_host SSH bin, kann ich echo $BULK ohne irgendein Problem laufen lassen.

Wie erhält man die Umgebungsvariable vom Remote-Host?

+0

Warum verwenden Sie 'delegate_to' in jeder Aufgabe? – techraf

+0

@techraf: In dieser Yaml-Datei gibt es mehrere Aufgaben. Nur wenige Aufgaben laufen in localhost und wenige in der Zielrichtung. Dies ist nur zum Testen, alle drei Aufgaben führen die gleiche Operation durch. Wenn ich die Umgebungsvariable lesen kann, lösche ich die anderen beiden. –

Antwort

1

Wenn ich SSH in den target_host bin ich in der Lage, ohne irgendein Problem laufen zu lassen.

Höchstwahrscheinlich weil BULK in einen der rc-Dateien nur in einer interaktiven Sitzung der Schale auf dem Zielcomputer beschafft gesetzt. Und die gather_facts Aufgabe von Ansible läuft in einer nicht interaktiven.

Wie erhält man die Umgebungsvariable vom Remote-Host?

die Zeile nach BULK Variable an einen Ort, Einstellung, wo es unabhängig vom Sitzungstyp bezogen ist (wo genau, hängt von den Ziel-OS und Shell)

Siehe zum Beispiel: https://unix.stackexchange.com/a/170499/133107 für Hinweise.