2016-07-06 13 views
2

는 내가 Vagrantfile 다음과 같이 방랑의 새로운 사용자 지정 옵션을 구현하기 위해 노력하고있어 :잘못된 옵션 경고없이 Vagrant에 대한 사용자 지정 옵션을 구현하는 방법은 무엇입니까?

# -*- mode: ruby -*- 
require 'getoptlong' 

opts = GetoptLong.new(
    [ '--vm-name',  GetoptLong::OPTIONAL_ARGUMENT ], 
) 

vm_name  = ENV['VM_NAME'] || 'default' 

begin 
    opts.each do |opt, arg| 
    case opt 
     when '--vm-name';  vm_name  = arg 
    end 
    end 
    rescue 
# @fixme: An invalid option error happens here. 
end 

Vagrant.configure(2) do |config| 
    config.vm.define vm_name 
    config.vm.provider "virtualbox" do |vbox, override| 
    override.vm.box = "ubuntu/wily64" 
    end 
end 

를 이제 때마다 나는 그것이 다음과 같은 경고를 보여주는 상관 없음 방랑 명령을 실행할 때, 예를

vagrant destroy -f 

/opt/vagrant/embedded/gems/gems/vagrant-1.8.1/bin/vagrant : 잘못된 옵션 -

또 다른 예를 들어 F :

$ vagrant --vm-name=foo up --no-provision 
/opt/vagrant/embedded/gems/gems/vagrant-1.8.1/bin/vagrant: unrecognized option `--no-provision' 
Bringing machine 'foo' up with 'virtualbox' provider... 
==> foo: Importing base box 'ubuntu/wily64'... 

위의 rescue 섹션에서 이러한 경고가 무시 될 수있는 방법이 있습니까?


post은 비슷하지만이 경우 많은 도움이되지 않습니다.

답변

5

Vagrantfile에서 불가능합니다. 방랑은 Vagrantfile을로드하기 전에 옵션을 파싱합니다. Vagrantfile이 실행될 때, 명령 행에서 커스텀 옵션으로 인해 발생 된 예외 이후에, Vagrant 프로세스는 이미 ensure 블록에 있습니다. 거기에서 복구 할 수있는 사람은 Vagrantfile입니다.

+0

위와 같은 사용 사례가 가능하다고 생각합니다. 내 대답은 아래를 참조하십시오. –

2

나는 오류를 피할 수있을 것이라고 생각합니다. 경고 - 나는 방랑자가 처음이다. 그러나 이것이 당신이 찾고있는 무엇을 할 것 : 당신이 당신의 방랑 호출에 전달 될 것이라고 생각하는 모든 명령 줄 옵션을 예상 할 수있는 경우

opts = GetoptLong.new(
    [ '--vm-name',  GetoptLong::OPTIONAL_ARGUMENT ], 
    [ '--host-name',  GetoptLong::OPTIONAL_ARGUMENT ], 
    [ '--provider',  GetoptLong::OPTIONAL_ARGUMENT ], 
    [ '--no-provision', GetoptLong::OPTIONAL_ARGUMENT ], 
) 
vm_name  = ENV['VM_NAME'] || 'default' 
host_name  = ENV['HOST_NAME'] || 'localhost.localdomain' 

, 당신은 getopts가 배열에 추가하고 그냥 무시할 수 기본적으로 방랑 처리에 의해 처리되기를 원하는 요소.

+0

약간의 해킹이 있지만 작동합니다.) – 4c74356b41