我和Vagrant有一个小问题。
在Vagrant文件中,我们定义了几个虚拟框的列表,它们基本上使用相同的配置并由vagrant设置:
boxes = [
{
:name => "box1",
:vmnumber => "1",
:mem => "256",
:cpu => "1"
},
{
:name => "box2",
:vmnumber => "6",
:mem => "256",
:cpu => "1"
},
...
]
...并以相同的格式使用名为boxes_optional
的第二个列表。例如,当调用vagrant up
时,vagrant会循环两个列表并启动VM。到现在为止还挺好。
我的问题是,我想让用户选择不启动boxes_optional
中的框。据我所知,你无法在vagrant up
命令中添加更多参数,只能通过ENV[variable]
查询环境变量,但这有点不方便。
还有mybe另一种更优雅的方式让这些盒子可选吗?我对Vagrant和Ruby很陌生,但我还没有找到一个很好的解决方案,所以我基本上都在寻找想法。
谢谢和最诚挚的问候,
/ tehK
答案 0 :(得分:2)
与流浪汉玩了一点,几乎是在写一个插件,但是在它的来源中发现,如果它们在命令之前前进并且用破折号或双破折号(与命令不同),它的参数实际上并不那么严格。
所以你需要按如下方式调用它:
$ vagrant --without-optional-boxes up
# or, works too: #
$ vagrant -without-optional-boxes up
现在,当你仍然能够从ARGV
获得它时,它不会在未知论点上咆哮:
boxes += optional_boxes unless (ARGV[0] == "--without-optional-boxes")
答案 1 :(得分:0)
你应该可以这样:
boxes += optional_boxes if ENV['START_OPTIONAL_BOXES']
boxes.each |box| do
# start box here
end
这样,如果START_OPTIONAL_BOXES
env var已设置,您将两个列表合并为一个,如果没有,则仅启动必填框。