15

I have the following configuration that only makes sense for vagrant up command:

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

Is it possible to hook into the vagrant API to retrieve the command currently being executed? 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
Chris Snow
  • 23,813
  • 35
  • 144
  • 309

1 Answers1

26

A Vagrantfile is just ruby code so you can easily get the command line arguments using the ARGV array.

Take the following vagrant command for example:

vagrant up webserver

That would start the Vagrant box defined as webserver in your Vagrantfile. You can then access the arguments like so:

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

So using your example you need to do the following:

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
Matt Cooper
  • 9,962
  • 2
  • 31
  • 26