Passer des variables d'environnement à l'errance shell provisioner
Il ressemble à passer des variables d'environnement lors de l'appel de vagrant up
est simple, si vous utilisez un Rubis provisioner:
VAR=123 vagrant up
Dans le Vagrantfile:
ENV['VAR']
Comment puis-je le faire avec la :shell
provisioner? Simplement faire cela ne semble pas fonctionner:
$VAR
Vous devez vous connecter pour publier un commentaire.
Depuis Vagrant 1.8.0 vous pouvez oublier le vilain hacks d'autres réponses ici. Utilisez simplement le
env
option pour la coque de provisioner (docs).L'utiliser comme ceci dans votre Vagrantfile:
Ceci permettra de définir l'environnement pour le provisionnement de script uniquement. Si vous avez besoin d'une persistance de la variable d'environnement pour tous les processus dans la machine virtuelle, ce qui est hors de portée de l'Errance et de provisionnement regardez ici: Shell variables d'environnement dans les fichiers sont transmis uniquement sur la première place.
env
paramètre ne semble fonctionner lors de l'utilisation d'unpath
script, pas uninline
script.env
fonctionne avecinline
.config.vm.provision :shell, path: "bootstrap.sh", env: {"MYSQL_DB_USERNAME"=>"django", "MYSQL_DB_PASSWORD"=>"supersecretpasswordwasreplaced"}
de l'autre côtéos.environ['MYSQL_DB_USERNAME']
donne une touche d'erreur 🙁config.vm.provision
option de configuration... et cette question est au sujet de l'approvisionnement. 🙂<<-SHELL ... SHELL
? Si non, peut vous combinez cela avec une version normale? Pour moi, il ne renvoieos.environ['variable']
directement, sans l'évaluer. J'ai ceci:sudo sed -i -e "s/-Xms.*/os.environ['ELASTIC_XMS']/g" /etc/elasticsearch/jvm.options
Ce n'est pas idéal, mais j'ai eu que cela fonctionne pour le moment:
s.inline
pars.path
et utiliser le même script que vous auriez passé avec:path => ""
. (Mon provisioner est des centaines de lignes et donc mal adapté à l'in-lining.):args => ""
paramètre, comme.s.args
?Je suis venu avec cette solution de provisioning basé sur CentOS: placer tous mes requise envioronment variables dans
/etc/profile.d/vagrant.sh
fichier et puis il est accessible à toute disposition de script.en bref:
Complète
Vagrantfile
peuvent être trouvés icihttps://gist.github.com/bivas/6192d6e422f8ff87c29d
Pour la postérité (aka dans le cas où je google à nouveau)... Il est possible de transmettre des paires clé-valeur par env:
Puis de référence dans votre script:
Bonus:
Au cas où quelqu'un se termine à la recherche pour savoir comment définir les variables de l'approvisionnement du script de l'environnement, cela a fonctionné pour moi.
Noter que ceci suppose que vous êtes le partage de votre répertoire de travail comme
/vagrant
sur la VM, mais ce doit être la valeur par défaut.install_app_with_monitoring.sh
?private_network
etGRAPHITE_HOST
. Pourrait même aller plus loin et utiliserexport GRAPHITE_HOST=#{ip}
pour faire référence à une seule commune ruby var.Vous pouvez utiliser
#{ENV['VAR']}
à l'intérieur d'un script en ligne, par exemple:Exemple tiré d'un travail Vagrantfile.
Cela a des inconvénients: si $VAR contient des guillemets simples, les choses vont se briser.
La plupart de ces réponses semble être dépassé. Avec Vagrant 2.1.1 cela a fonctionné pour moi:
La vagrant-env plugin fait exactement cela. Avec elle, vous pouvez ajouter des variables d'environnement pour
.env
fichier dans le répertoire local qui sera chargé deVagrant
fichier. Je suggère de garder.env
dans votre.gitignore
, de cette façon, vous avez votre vie privée garanti.Voici comment je avoir de travail.
Je suis allé de l'aide de l'errance des marionnettes provisioner moyen de l'utilisation de la coque provisioner. Je l'ai fait surtout parce que je voulais marionnette de ne pas exécuter en tant que root, shell fournisseur vous donne :privileged => false.
MON ANCIENNE:
MA NOUVELLE FAÇON:
Vous pouvez simplement spécifier pour
shell
à l'aide deinline
dans votreVagrantfile
fichier:Ou charger des variables supplémentaires à partir de fichier YAML:
Alternativement, vous pouvez mettre en œuvre certains des arguments optionnels à partir de la ligne de commande, par exemple:
alors utiliser:
opt['--foo'].to_s
.Voir aussi: Comment passer des paramètres à l'Errance et à la portée de Chef livre de recettes?
cela a fonctionné pour moi
Sur un ubutnu boîte, j'ai tout simplement fait le suivre dans mon bootstrap.sh: