2016-07-06 3 views
2

私は、次のようにVagrantfileベイグラントのための新しいカスタムオプションを実装しようとしています:無効なオプションの警告を表示せずにバゲージのカスタムオプションを実装する方法は?

# -*- 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が実行されると、コマンドラインのカスタムオプションのために発生した例外の後に、バグのプロセスは既に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

関連する問題