在Vagrantfile中获取vagrant命令行参数

Chr*_*now 14 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
Run Code Online (Sandbox Code Playgroud)

是否有可能挂钩到vagrant API来检索当前正在执行的命令?例如

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
Run Code Online (Sandbox Code Playgroud)

Mat*_*per 23

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

以下面的vagrant命令为例:

vagrant up webserver

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

ARGV[0] = up
ARGV[1] = webserver
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)