vagrant文​​件中的Shell环境变量仅在首次传递时传递

Tad*_*dhg 2 shell environment-variables vagrant

我正在运行Vagrant 1.8.5,它使用这样的格式在配置时支持Vagrantfile中的环境变量

config.vm.provision:shell,path:"bootstrap.sh",env:{"MYSQL_DB_USERNAME"=>"django","MYSQL_DB_PASSWORD"=>"supersecretpasswordwasreplaced"}

但是,我希望这些环境变量在up没有配置时,或者当我通过SSH连接到服务器来完成工作时也可用.我能找到的显而易见的方法是

  • 把它们装进盒子里(看起来像是矫枉过正)或者
  • 在我这里重复它们,config.ssh.forward_env以便它们可供配置器和SSH使用.

有没有更好的办法?

Fré*_*nri 8

我不确定最好的终极方式 - 我不时会看到这个问题和讨论.

在我的config.ssh.forward_env中重复它们,以便它们可供配置器和SSH使用.

好吧,它听起来像是一个很好的解决方案,但有一些缺点,我已经在这个问题中讨论过

就个人而言,当我需要设置env变量时,我会将它们添加到.profile文件中:

  config.vm.provision "shell", privileged: false, inline: <<-SHELL
    echo "export MYSQL_DB_USERNAME = django" > /home/vagrant/.profile
    echo "export MYSQL_DB_PASSWORD = supersecretpasswordwasreplaced" > /home/vagrant/.profile
  SHELL
Run Code Online (Sandbox Code Playgroud)

它们将在您登录时可用.


Vor*_*ung 7

乍一看,这个答案似乎与得票最高的答案相似。但是,请仔细查看第二个上的重定向运算符echo

config.vm.provision "shell", env: {"DOCKERHUBID"=>ENV['DOCKERHUBID'], "DOCKERHUBPASS"=>ENV['DOCKERHUBPASS']}, inline: <<-SHELL
echo "export DOCKERHUBID=$DOCKERHUBID" > /home/vagrant/.profile
echo "export DOCKERHUBPASS=$DOCKERHUBPASS" >> /home/vagrant/.profile
SHELL
Run Code Online (Sandbox Code Playgroud)