在Vagrantfile中获取vagrant命令行参数

时间:2014-01-01 09:48:08

标签: vagrant

我有以下配置只对vagrant up命令有意义:

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  if ENV["VB_GUI"] == "true" then vb.gui = true
  else
     puts("[info] VB_GUI environment variable not set so running headless")
  end
end

是否可以挂钩vagrant API来检索当前正在执行的命令? E.g。

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  if VAGRANT_API.command == "up"  # how can I do this?
    if ENV["VB_GUI"] == "true" then vb.gui = true
    else
       puts("[info] VB_GUI environment variable not set so running headless")
    end
  end
end

1 个答案:

答案 0 :(得分:22)

Vagrantfile只是ruby代码,因此您可以使用ARGV数组轻松获取命令行参数。

以下面的vagrant命令为例:

vagrant up webserver

这将启动在Vagrantfile中定义为网络服务器的Vagrant框。然后,您可以像这样访问参数:

ARGV[0] = up
ARGV[1] = webserver

因此,使用您的示例,您需要执行以下操作:

config.vm.provider :virtualbox do |vb|
  vb.gui = false
  if ARGV[0] == "up"
    if ENV["VB_GUI"] == "true" then vb.gui = true
    else
       puts("[info] VB_GUI environment variable not set so running headless")
    end
  end
end