vagrant-libvirtをネストした時のネットワークアドレス衝突への対処法
vagrant-libvirtを使うと、vagrantでlibvirtをproviderとして使うことことができ、自分でvirshコマンド等をいちいち叩かなくてすごい便利なのですが、
表題の通り、ネストして使おうとするとネットワークアドレスが衝突して2段目のvagrant up
に失敗します。
これは、vagrant-libvirtが使う管理用のネットワークのアドレスが、
ソースコード中にベタ書きで192.168.121.0/24
にデフォルトで設定されていることが原因です。
解決策1: Vagrantfileで libvirtのデフォルトネットワークを利用する様に変更する。
まず、以下の様にlibvirtのデフォルトのネットワークアドレスを調べます。
$ virsh net-dumpxml | grep "ip address" <ip address='192.168.122.1' netmask='255.255.255.0'>
この値を元に、以下の様にVagrantfileに追記すれば、 仮想マシンがdefaultネットワークを使う様になります
config.vm.provider :libvirt do |libvirt| libvirt.management_network_name='default' libvirt.management_network_address='192.168.122.0/24' end
これでvagrant up
をすればOKです。
解決策2: vagrant-libvirtのデフォルトネットワークのアドレスを変更する。
vagrant-libvirtは、デフォルトでvagrant-libvirtというlibvirtのネットワークを定義します。 このネットワークのアドレスを
virsh net-edit --network vagrant-libvirt
等で修正し、(今回は192.168.200.0/24
を使う様にxmlを修正)
VM(L2)向けのVagrantfileを以下の様な内容を追加することです。
config.vm.provider :libvirt do |libvirt| libvirt.management_network_address="192.168.200.0/24" end
ただ、一度vagrant up
をしないとvagrant-libvirt
ネットワーク自体が生成されてい無いので、この方法は使えず注意が必要です。
余談
なんの加減かわかりませんが、たまにDHCPでアドレスが降ってくるのが遅い場合があります...