Vagrantの仮想マシンとの紐付けの直し方

Vagrant logo

仮想マシンを起動しようとして、

$ vagrant up

を実行すると、最初の実行でなければ、以下のようなメッセージが出て最初に作った仮想マシンが起動しますが、

[default] VM already created. Booting if it's not already running…

何かの拍子でVagrantと既存の仮想マシンとの紐付けが削除されて、vagrant up実行時に新たな仮想マシンを作成してしまうことがあります。
次のようなメッセージが出て新しい仮想マシンを作ってしまいます。

[default] Importing base box 'CentOS 6.3'…

既存の仮想マシンに接続したいので、これでは困ります。
ところで、仮想マシンの実体は、次のディレクトリにありました。

~/VirtualBox\ VMs/    

既存の仮想マシンに加えて、意図せずに新たに作成されてしまった仮想マシンのファイルが見えます。

$ ls ~/VirtualBox\ VMs/
Hadoop_1359271283
Hadoop_1360995446

Vagrantは、仮想マシンとの紐付けをVagrantfileと同じディレクトリに存在する、.vagrantファイルで管理しています。
まだ一度も起動していないなど、仮想マシンとの紐付けが無い場合はこのファイルがありません。

既に仮想マシンを作っているにも関わらず、新しい仮想マシンが作られてしまう場合は、このファイルが存在しない可能性があります。

そのため、.vagrantを手動で作成し、紐付けを行います。
ファイルの中身はJSONになっており、紐付ける仮想マシンのUUIDを記述します。

UUIDは以下のコマンドで参照します。

$ VBoxManage list vms
"Hadoop_1359271283" {931864ed-55a1-4986-9e8d-ad63eb7ae597}
"Hadoop_1360995446" {6489a2af-eb76-4b89-a152-fc21077b761d}

二つ仮想マシンが存在し、最初の方を起動したいので、IDを以下のように.vagrantに記述します。

{"active":{"default":"931864ed-55a1-4986-9e8d-ad63eb7ae597"}}

これで、vagrant up.vagrantで記述した仮想マシンが起動するようになります。

なお、JSON中の“default”は、デフォルトの仮想マシンを使う場合です。multi-VMの場合は設定した仮想マシンの名前を指定してください。

{
   "active":{
        "web":"931864ed-55a1-4986-9e8d-ad63eb7ae597",
        "app":"6489a2af-eb76-4b89-a152-fc21077b761d"
   }
}