web-dev-qa-db-ja.com

プラグインでない場合は、Vagrantfileパスを明示的に指定します

Vagrantfileのパスを明示的に指定する方法はありますか?私の会社は次のようなことをしたいと考えています。Confluenceマシンでテストするには、vagrant spinup confluenceのようなコマンドを入力し、それをConfluence環境を含む別のディレクトリのVagrantfileにポイントして、これらすべてを起動します。マシン。

ただし、どのVagrantfileを使用するかを明示的に示す方法はないようで、Rubyはある程度(非常に)初めてなので、独自のプラグインを作成するのに苦労しています。誰かが何をすべきかについての推奨事項を持っていますか?それとも誰かがこれに似たことをしましたか?

28
addicted2unix

別個のVagrantfileを用意する必要はありません。同じファイルで複数のVMを定義できます。こちらのドキュメントをご覧ください: http://docs.vagrantup.com/v2/multi-machine/index.html

「通常」の環境でVMを1つ使用し、「コンフルエンス」環境で1つのVMを使用している場合は、それぞれを定義するだけのケースです。 VMおよびvagrant up-特定のVMを使用します。

それぞれの環境を構成する複数のマシンがある場合、2つのオプションがあります。正規表現を使用して、コマンドに名前を付けて正しく入力することを確認できます。または、Vagrantfileに少しロジックを入れて、人々が簡単にできるようにすることができます。 。

たとえば、Vagrantfileを少しハックすると、次のことができます。

Vagrant.configure('2') do |config|

    if ARGV[1] == 'confluence'
        ARGV.delete_at(1)
        confluence = true
    else
        confluence = false
    end

    config.vm.provider :virtualbox do |virtualbox, override|

        #virtualbox.gui = true

        virtualbox.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
        virtualbox.customize ["modifyvm", :id, "--memory", 512]

        override.vm.box = 'Ubuntu 12.10 x64 Server'
        override.vm.box_url = 'http://goo.gl/wxdwM'

    end

    if confluence == false

        config.vm.define :normal1 do |normal1|

            normal1.vm.hostname = 'normal1'
            normal1.vm.network :private_network, ip: "192.168.1.1"

        end

        config.vm.define :normal2 do |normal2|

            normal2.vm.hostname = 'normal2'
            normal2.vm.network :private_network, ip: "192.168.1.2"

        end

    end

    if confluence == true

        config.vm.define :confluence1 do |confluence1|

            confluence1.vm.hostname = 'confluence1'
            confluence1.vm.network :private_network, ip: "192.168.1.3"

        end

        config.vm.define :confluence2 do |confluence2|

            confluence2.vm.hostname = 'confluence2'
            confluence2.vm.network :private_network, ip: "192.168.1.4"

        end

    end

end

vagrant upは、通常のVMとvagrant up confluenceは、あなたの合流VMを表示します!

22
Matt Cooper

Andrew Lorenteの答えに加えて、VAGRANT_VAGRANTFILE環境変数を使用してVagrantfileのファイル名を指定することもできます。これは、現在の作業ディレクトリを変更しないというVAGRANT_CWDよりも優れており、相対パスに依存している場合に役立ちます。

たとえば、次はvagrant upに対してVagrantfile.otherを実行します。

VAGRANT_VAGRANTFILE=Vagrantfile.other vagrant up

ノート

  • これは、ドキュメント化されていない機能であるように見えましたが、これは ソースコードで表示 のみでした。
  • 以降のリリースでは、これはHashicorpのドキュメント 環境変数 に記載されています。
53
Mark Hobson

他の回答者は、この特定のケースでは別個のVagrantfilesを必要としなかったと正解ですが、Vagrantfileパスを指定するための正当な使用法があると思います-vagrant ssh-configスクリプト内の情報など。

幸いにも、VAGRANT_CWD環境変数:

VAGRANT_CWD=~/some/path/ vagrant ssh-config

これはどこにも文書化されていないようですが、 ソース内 で確認できます。

19
Erin Call

必要に応じて、必要に応じてさまざまなVagrantfileを使用できます。プロジェクトの新しいディレクトリを作成し(1つまたは複数のVMで構成できます)、そのディレクトリにcdを実行し、vagrant initを実行してVagrantに新しいVagrantfileを作成させます。その後、ニーズに合わせてカスタマイズできます。 VM新しいVagrantfileを使用して開始するには、それを含むディレクトリ内からvagrant upを実行するだけです。

2
avhilchen

シェルコマンドを括弧で囲むとサブシェルが作成されるため、Git for Windows(またはLinux/OS Xのbash)から次のことができます。

(cd test/Ruby; vagrant up)

1
danizen