与此问题类似:Passing variable to a shell script provisioner in vagrant
我想将变量传递给shell脚本配置器,但我想在调用配置器时在命令行上设置这些变量。这可能吗?
答案 0 :(得分:4)
这就是我想尝试的 - 我猜有可能因为Vagrantfile是一个ruby脚本,你可以使用大多数ruby可能性
小心但是当vagrant可能需要检查变量时,例如在执行vagrant up arg1 arg2
时,它期望arg1和arg2是在Vagrantfile中定义的机器名,并且会因为找不到它而引发错误
所以你需要传递像
这样的变量vagrant --arg1 --arg2 up
要阅读它们,你可以
# -*- mode: ruby -*-
# vi: set ft=ruby :
v1 = ARGV[0]
v2 = ARGV[1]
array_arg = [v1, v2]
Vagrant.configure("2") do |config|
blabla config
array_arg.each do |arg|
config.vm.provision "shell", run: "always" do |s|
s.inline = "echo $1"
s.args = arg
end
end
end
例如,执行将给出
fhenri@machine:~/project$ vagrant --arg1 --arg2 up
. . . . .
==> default: Running provisioner: shell...
default: Running: inline script
==> default: stdin: is not a tty
==> default: --arg1
==> default: Running provisioner: shell...
default: Running: inline script
==> default: stdin: is not a tty
==> default: --arg2
答案 1 :(得分:0)
在您的Vagrant文件中,添加以下内容-
{
"PROVISION_PARAMS" => "some_default_values",
}.each { |key, value| ENV[key] = value if ENV[key] == nil }
现在可以通过以下方式将这些参数传递给Shell脚本供应器-
config.vm.provision :shell, privileged: true, run: "always",
:path => "../../scripts/script.ps1",
:args => ENV['PROVISION_PARAMS']
您现在可以通过以下方式向此脚本提供命令行参数-
$ PROVISION_PARAMS=' param1 param2 "param 3" ' vagrant provision
如果未指定这些参数,脚本将采用默认值。