Es sieht so aus, als würden beim Aufrufen Umgebungsvariablen übergeben vagrant up
Wenn Sie einen Ruby-Provisioner verwenden ist es einfach :
VAR=123 vagrant up
In der Vagrantdatei:
ENV['VAR']
Wie mache ich das mit dem :shell
Provisioner? Einfach das zu tun scheint nicht zu funktionieren:
$VAR
quelle
env
scheint der Parameter nur zu funktionieren, wenn einpath
Skript verwendet wird, keininline
Skript.env
arbeite mitinline
.config.vm.provision :shell, path: "bootstrap.sh", env: {"MYSQL_DB_USERNAME"=>"django", "MYSQL_DB_PASSWORD"=>"supersecretpasswordwasreplaced"}
Auf der anderen Seiteos.environ['MYSQL_DB_USERNAME']
gibt es einen Schlüsselfehler :(Es ist nicht ideal, aber ich habe das jetzt zum Laufen gebracht:
quelle
s.inline
durchs.path
und das gleiche Skript verwenden Sie bestanden hätte:path => ""
. (Mein Provisioner besteht aus Hunderten von Zeilen und ist daher für Inlining:args => ""
Parameter wie diesem verwenden .s.args
?Ich kam mit dieser Lösung für die CentOS-basierte Bereitstellung: Platzieren Sie alle meine erforderlichen Umgebungsvariablen in
/etc/profile.d/vagrant.sh
Datei und dann in einem beliebigen Bereitstellungsskript darauf zu.Zusamenfassend:
Vollständig
Vagrantfile
finden Sie hier https://gist.github.com/bivas/6192d6e422f8ff87c29dquelle
Für die Nachwelt (auch bekannt als falls ich es noch einmal google) ... Es ist möglich, Schlüssel-Wert-Paare über env zu übergeben :
Verweisen Sie dann in Ihrem Skript auf sie:
Bonusfunktion:
quelle
Sie können
#{ENV['VAR']}
in einem Inline-Skript Folgendes verwenden: z.Beispiel aus einer funktionierenden Vagrant-Datei.
Dies hat einige Nachteile: Wenn $ VAR einfache Anführungszeichen enthält, werden die Dinge kaputt gehen.
quelle
Wenn jemand nach dem Festlegen von Variablen in der Umgebung des Bereitstellungsskripts sucht, hat dies für mich funktioniert.
Beachten Sie, dass dies voraussetzt, dass Sie Ihr Arbeitsverzeichnis wie
/vagrant
auf der VM freigeben, dies sollte jedoch die Standardeinstellung sein.quelle
install_app_with_monitoring.sh
?private_network
und sicherstellenGRAPHITE_HOST
. Könnte sogar noch einen Schritt weiter gehen undexport GRAPHITE_HOST=#{ip}
eine einzelne gemeinsame Rubinvariante referenzieren.Die meisten dieser Antworten scheinen veraltet zu sein. Mit Vagrant 2.1.1 hat das bei mir funktioniert:
quelle
Das Vagrant-Env- Plugin macht genau das. Damit können Sie der
.env
Datei im lokalen Verzeichnis Umgebungsvariablen hinzufügen , die in dieVagrant
Datei geladen werden. Ich schlage vor,.env
in Ihrem zu bleiben.gitignore
, auf diese Weise haben Sie Ihre Privatsphäre garantiert.quelle
So funktioniert es.
Ich ging von der Verwendung des Vagabundpuppen-Provisioners zur Verwendung des Shell-Provisioners über. Ich tat dies hauptsächlich, weil ich Marionette wollte, um nicht als root zu laufen, Shell-Anbieter gibt Ihnen: privileged => false.
MEIN ALTER WEG:
MEIN NEUER WEG:
quelle
Sie können einfach angeben,
shell
ob Sieinline
in IhrerVagrantfile
Datei Folgendes verwenden möchten:Oder laden Sie einige zusätzliche Variablen aus der YAML-Datei:
Alternativ können Sie einige optionale Argumente über die Befehlszeile implementieren, z.
dann benutze:
opt['--foo'].to_s
.Siehe auch: Wie übergebe ich Parameter an Vagrant und habe sie im Umfang des Kochbuchs?
quelle
das hat bei mir funktioniert
quelle
Auf einer Ubutnu-Box habe ich in meiner bootstrap.sh einfach Folgendes gemacht:
quelle