如何在Vagrant中选择虚拟盒子?

时间:2015-05-27 08:15:03

标签: ruby vagrant vagrantfile

我和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

2 个答案:

答案 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已设置,您将两个列表合并为一个,如果没有,则仅启动必填框。