Vagrant将args从命令行传递到配置文件

时间:2014-10-28 10:53:12

标签: vagrant vagrantfile

使用Vagrant,是否可以将来自vagrant up {args}的args传递到配置文件中?

我希望人们能够传入他们的github帐户名,以便我可以将其传递给配置文件 - 例如:

vagrant up iwayneo
然后将

iwayneo传递给配置文件 - 这可能吗?

如果我在vagrant up之前运行的sh脚本中执行以下操作:

echo "Please enter the local username - for vagrant boxes enter vagrant:"
read uname
export LOCALUSER=$uname
echo " " >> ~/.bashrc
echo "LOCALUSER=$uname" >> ~/.bashrc

echo "Please enter the bitbucket username:"
read bbuname
export BITBUCKETUSER=$bbuname
echo " " >> ~/.bashrc
echo "BITBUCKETUSER=$bbuname" >> ~/.bashrc

echo "Please enter bitbucket password:"
read bbpass
export BITBUCKETPASS=$bbpass
echo " " >> ~/.bashrc
echo "BITBUCKETPASS=$bbpass" >> ~/.bashrc

echo "configured for local username $uname, bitbucket username $bbuname and bitbucket pass $bbpass"

source ~/.bashrc

接下来在我的流浪文件中:

puts "Current user is #{ENV['LOCALUSER']}"

if !ENV.has_key?("LOCALUSER")
  raise "Please specify the `LOCALUSER` environment variable - you can do this by running config.sh"
end

if !ENV.has_key?("BITBUCKETUSER")
  raise "Please specify the `BITBUCKETUSER` environment variable - you can do this by running config.sh"
end

if !ENV.has_key?("BITBUCKETPASS")
  raise "Please specify the `BITBUCKETPASS` environment variable - you can do this by running config.sh"
end

调用LOCALUSER加注,puts "Current user is #{ENV['LOCALUSER']}"收取Current user is,因此绝对不会。

AHAAAA - 我必须使用一种班轮格式吗?有没有办法不使用那种格式?

指出答案是正确的,但任何帮助都会非常感激

1 个答案:

答案 0 :(得分:1)

执行此类操作的最常见方法是使用环境变量。例如:

ACCOUNT=iwayneo vagrant provision

然后,您可以使用the ENV class在Vagrantfile中使用它。假设您想将其作为参数传递给shell provisioner脚本,您可以使用以下内容:

if !ENV.has_key?("ACCOUNT")
  raise "Please specify the `ACCOUNT` environment variable"
end

Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "script.sh", args: ENV["ACCOUNT"]
end

编辑:添加sh脚本设置:

你必须source你的sh脚本让变量在shell会话中生效。否则,它们仅在该子shell的脚本运行期间可用。同样,您还需要{。1}} .bashrc中的变量,以便它们在Vagrant过程中可用。

所有这些都与shell和子进程如何使用环境变量有关。 Vagrant没什么特别的。