Vagrantでホストオンリーアダプターでハマった
Vagrantで複数VM立ち上げてIPを設定して使用したい用途があるとします。
例えば今回はCassandraのクラスタをローカルに立ててOpsCenterの機能を
試してみようと思っていたので次のようなVagrantfileを書きました。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos5.5" config.vm.define :opscenter do |ops| ops.vm.network :private_network, ip: "192.168.100.1" ops.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "2048", "--name", "opscenter"] end end config.vm.define :cassandra1 do |cas| cas.vm.network :private_network, ip: "192.168.100.2" cas.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "1536", "--name", "cassandra-1"] end end config.vm.define :cassandra2 do |cas| cas.vm.network :private_network, ip: "192.168.100.3" cas.vm.provider :virtualbox do |vb| vb.customize ["modifyvm", :id, "--memory", "1536", "--name", "cassandra-2"] end end end
すると以下のようなエラーをはいたり、
もしくは起動できてもお目当てのIPアドレスが付いて無かったりしました。
[opscenter] Booting VM... [opscenter] Waiting for VM to boot. This can take a few minutes. [opscenter] VM booted and ready for use! [opscenter] Configuring and enabling network interfaces... The following SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed! /sbin/ifup eth1 2> /dev/null
この現象、ググったらそこそこ出てはくるのですが、
解決方法どおりにしても解決しなかったりで時間が結構かかってしまいました。
上記のログが出るのはVirtualBoxのホストオンリーアダプタ登録と不整合があるからです。(多分)
未登録のサブネットをVagrantfileに指定した場合、
vagrantかVirtualBoxのどちらかわかりませんが、自動的に登録しようとしてくれます。
この時に自動登録されるアドレスがそのサブネットの1番です。
つまり今回の例で言うと192.168.100.1で、
自分でも192.168.100.1を指定していたためにバッティングしておかしなことになったのでしょう。
Vagrantfileには1以外を指定すれば無用な問題は避けられそうです。
例のVagrantfileのアドレスをそれぞれ、
192.168.100.10
192.168.100.20
192.168.100.30
として再度実行すると想定どおりに起動できました。
これって要するに使用するサブネットのデフォルトゲートウェイの定義が必要ってことなのかな?
この事は多分わかってる人には当たり前のことだと思うのですが、
自分には曖昧だったので用語はともかく挙動は理解できてよかったです。
vagrant destroyするとアダプタは自動的に削除されます。
なお、自動登録削除の挙動は環境によって異なるかもしれません。
私の今確認中の環境はWindowss7pro vagrant1.1.4 virtualbox4.2.10です。
自動で登録されない場合はあらかじめ登録しておくことで解決出来ます。
VirtualBox管理画面->ファイル->環境設定->ネットワーク
画面の右のほうにあるプラスボタンを押してアダプタを追加しアドレスを設定します。
これでめでたく、、、と思ってOK押した後にもう一度開いてみたら表示がバグっていた。
起動すると#2のついた別のアダプタを登録してますね、、、
会社と家でも若干挙動が違いそうなので、続きはもう少し調べてみます。