与这个问题类似:在vagrant中向shell脚本provisioner传递变量
我想在调用 provisioner 时通过命令行设置变量并将其传递给 shell 脚本 provisioner。这是否可行?
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
vagrant provision --arg1
,这样它就不会运行 vagrant up
,而是运行 vagrant provision
(如果机器已经启动但需要重新配置)。 - Jonathanvagrant
命令之后立即设置它。如果你把它放在像provision命令这样的vagrant命令之后,vagrant会认为它是自己命令的参数,并报错。如果你在这种情况下运行vagrant --arg1 provision
,它仍然只会运行provision命令。 - Frederic Henri{
"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
如果没有指定这些参数,脚本将使用默认值。
vagrant up arg1 arg2
的操作,并将 arg1 和 arg2 发送给配置管理器吗? - Frederic Henri