Ruby 将命令行参数传递给vagrant shell脚本供应器
与这个问题类似:Ruby 将命令行参数传递给vagrant shell脚本供应器,ruby,shell,vagrant,provisioning,Ruby,Shell,Vagrant,Provisioning,与这个问题类似: 我想将变量传递给shell脚本provisioner,但我想在调用provisioner时在命令行上设置这些变量。这是可能的吗?这就是我要尝试的-我想有一些可能性,因为VagarntFile是一个ruby脚本,您可以使用大多数ruby可能性 但是要小心,因为vagrant可能需要检查变量,例如,在执行vagrant up arg1 arg2时,它希望arg1和arg2是vagrant文件中定义的机器名,并且会因为找不到而引发错误 所以你需要像这样传递这些变量 vagrant -
我想将变量传递给shell脚本provisioner,但我想在调用provisioner时在命令行上设置这些变量。这是可能的吗?这就是我要尝试的-我想有一些可能性,因为VagarntFile是一个ruby脚本,您可以使用大多数ruby可能性 但是要小心,因为vagrant可能需要检查变量,例如,在执行
vagrant up arg1 arg2
时,它希望arg1和arg2是vagrant文件中定义的机器名,并且会因为找不到而引发错误
所以你需要像这样传递这些变量
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
在您的文件中,添加以下内容-
{
"PROVISION_PARAMS" => "some_default_values",
}.each { |key, value| ENV[key] = value if ENV[key] == nil }
这些参数现在可以通过以下方式传递给shell脚本provisioner-
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发送给provisioner?我想调用vagrant provision--arg1
,这样它就不会运行vagrant up
,而是运行vagrant provision
(如果机器已启动但需要重新设置)如果您想拥有自己的变量,那么就应该在vagrant
命令之后拥有它,如果您将它放在vagrant命令之后,就像provision命令一样,vagrant会期望它是自己命令的一个参数,并会声明有错误。如果您运行vagrant--arg1 provision
在这种情况下,它仍然会运行provision命令仅离子