Vagrant の bridge にホストマシンのデフォルトルートの NIC を自動指定する
VirtualBox on OS X にて Vagrant で複数 VM を起動するとき、public_network を使っていると毎度ブリッジインタフェースの選択が面倒です。
各 VM の起動時に都度選択画面が出るので、全台起動するまでターミナルに張り付いていないといけません。
下記のように固定してしまっても良いのですが、ホストマシンが有線接続な時はそちらにブリッジしたいという欲もあります。
config.vm.network "public_network", bridge: 'en0: Wi-Fi (AirPort)'
そんなときは下記のように Vagrantfile 中に一文入れてしまえば良いです。
ありがたいことに、VBoxManage list bridgedifs
は、ホストマシンのデフォルトルートのインタフェースを 1 番目に出力してくれるので、これを bridge オプションに入れるようにします。
Vagrant.configure(2) do |config|
...snip...
# ホストマシンのデフォルトルートの NIC を取得
bridge_if = %x(VBoxManage list bridgedifs | grep '^Name:' | head -n 1).chomp.sub(/^Name: +/, "")
config.vm.define :web do |web|
web.vm.network "private_network", ip: "172.16.0.101", netmask: "255.255.255.0"
web.vm.network "public_network", bridge: bridge_if
end
config.vm.define :api do |api|
api.vm.network "private_network", ip: "172.16.0.102", netmask: "255.255.255.0"
api.vm.network "public_network", bridge: bridge_if
end
config.vm.define :db do |db|
db.vm.network "private_network", ip: "172.16.0.103", netmask: "255.255.255.0"
db.vm.network "public_network", bridge: bridge_if
end
end
ちなみに、use_dhcp_assigned_default_route
を書いておくと、VM のデフォルトルートが public_network になって何かと便利です。
config.vm.network "public_network", use_dhcp_assigned_default_route: true