1

「vm グロビング」を無効にする方法はありますか? つまり、Vagrant ファイルで定義された 2 つの vm と があり、 を実行:devした場合、ボックスを指定しなかったため、vagrant がコマンドの実行を拒否するようにします。:prodvagrant reload

明確にするために、私の設定は次のとおりです。

Vagrant.configure("2") do |config|
  config.berkshelf.enabled = true

  config.vm.define :dev do |dev|
  end

  config.vm.define :prod do |prod|
  end
end
4

1 に答える 1

2

Vagrantfile の先頭に以下を追加してVALIDATE_ACTIONS、VM を必要とするアクションで更新できます。vagrant destroyVM が 1 つしか定義されていない場合でも、(VM を指定せずに) コマンドを実行できることに注意してください。

# Actions to validate
VALIDATE_ACTIONS = [ 'halt', 'destroy' ]

# Override default actions to check machine list
class ValidateCommand < Vagrant.plugin(2, :command)
  class << self
    attr_accessor :delegate_action
  end

  def initialize argv, env
    super(argv, env)
    @argv = argv
  end

  def execute
    vms = []
    with_target_vms(@argv, :reverse => true) do | machine |
      vms << machine
    end
    if vms.size > 1
      puts 'Please specify a single VM'
      1
    else
      with_target_vms(@argv, :reverse => true) do | machine |
        machine.action(ValidateCommand.delegate_action)
      end
      0
    end
  end
end

# Wrap validate command in plugin and invoke for overridden actions
class ValidatePlugin < Vagrant.plugin(2)
  name "Validate"
  VALIDATE_ACTIONS.each do | action |
    command action do
      ValidateCommand.delegate_action = action
      ValidateCommand
    end
  end
end
于 2013-07-23T16:21:42.663 に答える