2013-07-18 5 views
10

Moje pudełka Vagrant używają publicznych sieci, aby mogły się reklamować za pomocą zeroconf/Bonjour. Vagrantfile wyraźnie ustawia zmostkowany interfejs sieciowy:Preferowane awaryjne interfejsy sieciowe z Vagrantem?

config.vm.network :public_network, :bridge => 'en2: USB Ethernet' 

Większość czasu po prostu wszystko działa, ale jeśli mam podłączony za pośrednictwem innej sieci, a określony interfejs nie istnieje, vagrant up poprosi mnie, aby wybrać z dostępne interfejsy sieciowe:

[default] Specific bridge 'en2: USB Ethernet' not found. You may be asked to specify 
which network to bridge to. 
[default] Available bridged network interfaces: 
1) en0: Wi-Fi (AirPort) 
2) p2p0 
What interface should the network bridge to? 

Czy istnieje sposób, aby powiedzieć Vagrantowi, aby wybrał z listy preferowanych interfejsów sieciowych? To, czego chcę, to wdzięczny powrót, jeśli główna sieć nie jest dostępna.

Odpowiedz

13

Oto rozwiązanie wymyśliłem, że wydaje się działać dobrze do tej pory:

W Vagrantfile, dodać następujące górze pliku:

pref_interface = ['en2: USB Ethernet', 'en0: Wi-Fi (AirPort)'] 
vm_interfaces = %x(VBoxManage list bridgedifs | grep ^Name).gsub(/Name:\s+/, '').split("\n") 
pref_interface = pref_interface.map {|n| n if vm_interfaces.include?(n)}.compact 
$network_interface = pref_interface[0] 

Następnie, wewnątrz Vagrant.configure, użyj $network_interface określić mostek:

config.vm.network :public_network, :bridge => $network_interface 
+0

Chłodny, ale co po prostu utworzenie Vagrantfile w pliku ~/.vagrant.d/określająca globalny domyślny zamiast wyglądasz g przy dostępnych opcjach za każdym razem z rubinem, który wysłałeś? – kanzure

+0

Dziękuję bardzo, to jest świetna wskazówka. Dodałem "en1: Wi-Fi (AirPort)" do listy, ponieważ w moim mac jest en1 –