「車輪の再実装」って言葉が好き(実践はできてない)

vagrant-libvirtをネストした時のネットワークアドレス衝突への対処法

vagrant-libvirtを使うと、vagrantlibvirtを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でアドレスが降ってくるのが遅い場合があります...

参考