31803


下記のような運用を想定しています。

[code]

    ├── Project-A
    │       └── Vagrantfile
    ├── Project-B
    │       └── Vagrantfile
    └── Project-C
            └── Vagrantfile
    
[/code]

各プロジェクトごとに個別にVMを管理したいのですが、Vagrantfileで同じbox名を指定すると、同じVMが起動してしまいます。

[code]

    config.vm.box = "bento/ubuntu-16.04"
    
[/code]

`bento/ubuntu-16.04`というboxをテンプレートにして個別にVMを管理したいのですが、そういった使い方は可能でしょうか？

Webの情報では1つのVagrantfileから複数のVMを起動するというサンプルしか見つけられませんでした。

**追記**  
コメントを受けて、各ツールの情報を開示します。

  * プロバイダ VirtualBox 5.1.12
  * ホストOS Windows 10
  * ゲストOS Linux (Ubuntu 16.04)
  * Vagrant 1.9.1


CC BY-SA 3.0
2017-01-12T10:07:24.000
31795
2017-01-17T15:16:23.177
2017-01-12T13:30:34.573
17238
17238
question
vagrant
Vagrantで複数のVagrantfileから複数のVMを起動したい


Vagrantの実装を詳細まで知っている訳ではありませんが、概念的には

  1. Virtualboxのイメージ名
  2. Vagrantでプロジェクト毎のマシン名の定義(マルチマシン定義)

これらのどちらか（もしくは両方）を変更することでそれぞれ独立したVMとして構築出来ます。

## 1\. Virtualboxのイメージ名の変更

Vagrantfileでプロバイダを"virtualbox"に設定しているとのことですので、以下のように変更してみてください。

**Project-AのVagrantfile**

[code]

    Vagrant.configure("2") do |config|
        config.vm.box = "bento/ubuntu-16.04"
        config.vm.provider "virtualbox" do |vb|
            # virtualboxの設定
            vb.name="projectA"
        end
    end
    
[/code]

**Project-BのVagrantfile**

[code]

    Vagrant.configure("2") do |config|
        config.vm.box = "bento/ubuntu-16.04"
        config.vm.provider "virtualbox" do |vb|
            # virtualboxの設定
            vb.name="projectB"
        end
    end
    
[/code]

このように記述することでVirtualboxのイメージ名を変更することができ、結果としてそれぞれ別のVMとして独立させることが出来ます。

## 2\. Vagrantでプロジェクト毎のマシン名の定義(マルチマシン定義)

まず、理解しやすいようにコマンドライン上で

[code]

    vagrant global-status
    
[/code]

と入力してみてください。すると、これまで作成したVagrant環境一覧が表示されるはずです。  
表示されたテーブルに nameという列があると思います。

何も設定していない状態だとここが default
になっていると思いますが、これをプロジェクト毎に個別の名前を割り当てることでVMを独立させることが出来ます。

**Project-AのVagrantfile**

[code]

    Vagrant.configure("2") do |config|
      config.vm.box = "bento/ubuntu-16.04"
      #マシン名の定義
      config.vm.define "project-a"
    end
    
[/code]

**Project-BのVagrantfile**

[code]

    Vagrant.configure("2") do |config|
      config.vm.box = "bento/ubuntu-16.04"
      #マシン名の定義
      config.vm.define "project-b"
    end
    
[/code]

上記を設定後、reloadして再度

[code]

    vagrant global-status
    
[/code]

で先ほどのテーブルを確認すると、name列にそれぞれ project-a, project-bとしてマシン名が設定出来ているかと思います。


CC BY-SA 3.0
2017-01-12T20:35:39.340
31803
2017-01-17T15:16:23.177
2017-01-17T15:16:23.177
13097
13097
31795
answer