如何访问 vagrantfile 中的可用框列表

How to access the list of available boxes in a vagrantfile

我正在尝试根据可用的内容在两个不同的框之间切换,从而使我的 Vagrantfile 更智能。

我希望能够从 ubuntu/trusty 创建一个盒子,并使用 Puppet 配置它(已经完成),但是我想打包那个盒子并使用这个机器创建更多机器作为起点。

我在想一些事情:

available_boxes = <your answer here>
if available_boxes.include? 'my/custombox'
    config.vm.box = 'my/custombox'
else
    config.vm.box = 'ubuntu/trusty'
end

第一次使用这种方式将从 ubuntu/trusty 开始,但在您配置第一个虚拟机后,您可以执行以下操作:

vagrant package --base my/custombox

或类似的东西,从那里开始将这个作为基础框。

 available_boxes= `vagrant box list`.gsub(/\s+\(.*\)\n/,"\n").split("\n")

vagrant box list 运行一个子 shell 来列出可用的框,gsub(/\s+\(.*\)\n/,"\n") 使用模式匹配替换处理输出,因此我们每行得到一个框名称,.split("\n") 将字符串拆分为每行命令输出的数组元素。

正则表达式分解如下:\s+(一个或多个空格)、\(.*\)(后跟括号内的任何字符)和\n(后跟一个换行符)。