背景
- Vagrant で開発中のプロダクトを同僚に見てもらいたい
- 同僚は同じ LAN の中にいる
- そうだ bridge 使おう
...という感じで Vagrant に public interface を追加したくなる場面がありますよね、ね
config.vm.network :public_network
でもそれだけだと vagrant up
する度に interface を手動選択しなければいけなくなります。
Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en4: Thunderbolt 1
3) p2p0
これは bridge
の指定をすることで回避できるのですが……
config.vm.network :public_network, bridge: 'en0: Wi-Fi (AirPort)'
ブリッジに使いたい interface は、ホストによって違いますよね。 (MacBook Air は Airport が en0 だけど MacBook Pro は en1 とか……)
そこで、 環境変数で指定 できるようにしてみました。
手順
- Vagrantfile に以下のコード片を足します
if ENV['VAGRANT_BRIDGE']
interfaces = %x(VBoxManage list bridgedifs)
re = /Name: +(.*#{ENV['VAGRANT_BRIDGE']}.*)/
if interfaces =~ re
config.vm.network :public_network, bridge: $1
end
end
- 環境変数
VAGRANT_BRIDGE
に使いたいインターフェースの名前(一部でも可)を指定してvagrant up
します
$ VAGRANT_BRIDGE=Wi-Fi vagrant up
これで様々な環境で bridge することができるようになりました。
環境変数での指定がなければ public_network 自体を作らないので安心ですね
ちなみに
こんな風に書くと bridge に指定できるinterface 名を Vagrant を実行せずに得られます
$ VBoxManage list bridgedifs |grep '^Name:'
Name: en0: Wi-Fi (AirPort)
Name: en4: Thunderbolt 1
Name: bridge0
Name: p2p0