Получение аргументов командной строки в рамках Vagrantfile

У меня есть следующая конфигурация, которая имеет смысл только для команды 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

Можно ли подключиться к 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

Ответ 1

A Vagrantfile - это просто код ruby, поэтому вы можете легко получить аргументы командной строки с помощью массива ARGV.

Возьмите следующую команду бродяг, например:

vagrant up webserver

Это запустит окно Vagrant, определенное как веб-сервер в вашем Vagrantfile. Затем вы можете получить доступ к таким аргументам:

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