Hallo, ich versuche herauszufinden, wie Umgebungsvariablen mit Ansible festgelegt werden.
etwas, das ein einfacher Shell-Befehl wie folgt lautet:
EXPORT LC_ALL=C
Als Shell-Befehl ausprobiert und beim Verwenden des Umgebungsmoduls wurde ein Fehler festgestellt, und es ist nichts passiert.
Was vermisse ich
Antworten:
Es gibt mehrere Möglichkeiten, dies zu tun, und aus Ihrer Frage geht nicht hervor, was Sie benötigen.
1. Wenn die Umgebungsvariable NUR PRO AUFGABE definiert werden muss, gehen Sie folgendermaßen vor:
Beachten Sie, dass
MY_ENV_VARIABLE
NUR für die erste Aufgabe verfügbar ist undenvironment
diese nicht dauerhaft auf Ihrem System festgelegt wird.Hoffentlich bald mit
environment
wird auch möglich sein , auf Spielebene , nicht nur Task - Ebene , wie oben. Derzeit ist auf Ansibles GitHub eine Pull-Anfrage für diese Funktion geöffnet: https://github.com/ansible/ansible/pull/8651UPDATE: Es ist jetzt ab dem 2. Januar 2015 zusammengeführt.
2. Wenn Sie eine permanente Umgebungsvariable + systemweit / nur für bestimmte Benutzer wünschen
Sie sollten sich ansehen, wie Sie dies in Ihrer Linux-Distribution / Shell tun. Dafür gibt es mehrere Stellen. Zum Beispiel definieren Sie dies in Ubuntu in Dateien wie zum Beispiel:
~/.profile
/etc/environment
/etc/profile.d
VerzeichnisUbuntu-Dokumente dazu finden Sie hier: https://help.ubuntu.com/community/EnvironmentVariables
Immerhin für die Einstellung der Umgebungsvariablen in ex. Unter Ubuntu können Sie einfach das
lineinfile
Modul von Ansible verwenden und einer bestimmten Datei die gewünschte Zeile hinzufügen. Konsultieren Sie Ihre Betriebssystemdokumente, um zu erfahren, wo Sie es hinzufügen müssen, um es dauerhaft zu machen.quelle
Ich hatte nicht genug Ruf, um Kommentare abzugeben, und füge daher eine neue Antwort hinzu.
Die Antwort von Gasek ist ganz richtig. Nur eines: Wenn Sie die
.bash_profile
Datei oder die aktualisieren/etc/profile
, werden diese Änderungen erst nach einer neuen Anmeldung übernommen. Wenn Sie die env-Variable festlegen und sie dann in nachfolgenden Aufgaben im selben Playbook verwenden möchten, sollten Sie diese Umgebungsvariablen in die.bashrc
Datei aufnehmen.Ich denke, der Grund dafür ist das Login und die Nicht-Login-Shells.
Ansible liest beim Ausführen verschiedener Aufgaben die Parameter aus einer
.bashrc
Datei anstelle von.bash_profile
oder/etc/profile
.Wenn ich beispielsweise meine Pfadvariable aktualisiert habe, um die benutzerdefinierte Binärdatei in die
.bash_profile
Datei des jeweiligen Benutzers aufzunehmen, und dann eine Quelle für die Datei erstellt habe. Die nächsten nachfolgenden Aufgaben erkennen meinen Befehl nicht. Wenn Sie jedoch die.bashrc
Datei aktualisieren , funktioniert der Befehl.Dies würde funktionieren , aber wenn ich es mit Profildateien gemacht
mysql -e "show databases"
hätte, hätte das einen Fehler gegeben.Dieser wird nicht funktionieren , wenn wir alle diese Aufgaben im selben Spielbuch haben.
quelle
source file
tun. file
Hier ist eine schnelle lokale Aufgabe, um Schlüssel / Werte dauerhaft festzulegen
/etc/environment
(systemweit für alle Benutzer):und die vars dafür:
und ja, wenn Sie aus- und wieder einsteigen,
env
werden die neuen Umgebungsvariablen angezeigt.quelle
dest
wurde durch ersetztpath
, sollte aber laut docs noch funktionieren. Wenn nicht, wechseln Sie zupath
.Zum dauerhaften Festlegen von Umgebungsvariablen können Sie eine der vorhandenen Rollen bei Ansible Galaxy verwenden. Ich empfehle weareinteractive.environment .
Mit Ansible-Galaxie:
Verwenden der Anforderungen.yml:
Dann in deinem Spielbuch:
quelle
Dies ist die beste Option. Wie Michal Gasek (erste Antwort) sagte , können wir seit dem Zusammenführen der Pull-Anfrage ( https://github.com/ansible/ansible/pull/8651 ) permanente Umgebungsvariablen einfach nach Spielstufe festlegen .
quelle