如何使 Vagrant 中的虚拟框可选?
How to make virtual boxes in Vagrant optional?
我遇到了 Vagrant 的一个小问题。
在Vagrant文件中,我们定义了几个基本使用相同配置的virtual box的列表,由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]
查询环境变量,但这样有点不方便。
是否有另一种更优雅的方式使这些框成为可选的?我对 Vagrant 和 Ruby 还很陌生,我还没有 google 一个好的解决方案,所以我基本上是在这里寻找想法。
谢谢并致以最诚挚的问候,
/tehK
你应该可以这样做:
boxes += optional_boxes if ENV['START_OPTIONAL_BOXES']
boxes.each |box| do
# start box here
end
这样,如果设置了 START_OPTIONAL_BOXES
环境变量,您将把两个列表合并为一个,如果没有设置,则只启动强制框。
更新答案
玩了一下 vagrant,几乎是在写一个插件,但在它的源代码中发现它实际上对它的参数没有那么严格,如果它们在命令之前并且在前面加上破折号或双破折号(与命令不同).
所以需要这样调用:
$ vagrant --without-optional-boxes up
# or, works too: #
$ vagrant -without-optional-boxes up
现在它不会对未知参数狂吠,而你仍然可以从 ARGV
:
获取它
boxes += optional_boxes unless (ARGV[0] == "--without-optional-boxes")
我遇到了 Vagrant 的一个小问题。
在Vagrant文件中,我们定义了几个基本使用相同配置的virtual box的列表,由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]
查询环境变量,但这样有点不方便。
是否有另一种更优雅的方式使这些框成为可选的?我对 Vagrant 和 Ruby 还很陌生,我还没有 google 一个好的解决方案,所以我基本上是在这里寻找想法。
谢谢并致以最诚挚的问候,
/tehK
你应该可以这样做:
boxes += optional_boxes if ENV['START_OPTIONAL_BOXES']
boxes.each |box| do
# start box here
end
这样,如果设置了 START_OPTIONAL_BOXES
环境变量,您将把两个列表合并为一个,如果没有设置,则只启动强制框。
更新答案
玩了一下 vagrant,几乎是在写一个插件,但在它的源代码中发现它实际上对它的参数没有那么严格,如果它们在命令之前并且在前面加上破折号或双破折号(与命令不同).
所以需要这样调用:
$ vagrant --without-optional-boxes up
# or, works too: #
$ vagrant -without-optional-boxes up
现在它不会对未知参数狂吠,而你仍然可以从 ARGV
:
boxes += optional_boxes unless (ARGV[0] == "--without-optional-boxes")