diff --git a/dev/vagrant/Vagrantfile b/dev/vagrant/Vagrantfile index 1daa8f2ab4..6f1626ec9a 100644 --- a/dev/vagrant/Vagrantfile +++ b/dev/vagrant/Vagrantfile @@ -56,6 +56,12 @@ PROVIDER_DEFAULTS ||= { } } +# Whether the host network adapter is Wi-Fi. +# On VirtualBox, the user must first manually create a NAT-Network +# named "OSNetwork". The default network CIDR must be changed. +# The Neutron external interface will be connected to this Network. +WIFI = false unless self.class.const_defined?(:WIFI) + # Whether to do Multi-node or All-in-One deployment MULTINODE = false unless self.class.const_defined?(:MULTINODE) @@ -112,6 +118,38 @@ rescue "Missing configuration for NODE_SETTINGS[#{node}][#{setting}]" end +def configure_wifi_vbox_networking(vm) + # Even if adapters 1 & 2 don't need to be modified, if the order is to be + # maintained, some modification has to be done to them. This will maintain + # the association inside the guest OS: NIC1 -> eth0, NIC2 -> eth1, NIC3 -> + # eht2. The modifications for adapters 1 & 2 only change optional properties. + # Adapter 3 is enabled and connected to the NAT-Network named "OSNetwork", + # while also changing its optional properties. Since adapter 3 is used by + # Neutron for the external network, promiscuous mode is set to "allow-all". + # Also, use virtio as the adapter type, for better performance. + vm.customize ["modifyvm", :id, "--nictype1", "virtio"] + vm.customize ["modifyvm", :id, "--cableconnected1", "on"] + vm.customize ["modifyvm", :id, "--nicpromisc2", "deny"] + vm.customize ["modifyvm", :id, "--nictype2", "virtio"] + vm.customize ["modifyvm", :id, "--cableconnected2", "on"] + vm.customize ["modifyvm", :id, "--nic3", "natnetwork"] + vm.customize ["modifyvm", :id, "--nat-network3", "OSNetwork"] + vm.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"] + vm.customize ["modifyvm", :id, "--nictype3", "virtio"] + vm.customize ["modifyvm", :id, "--cableconnected3", "on"] +end + +def configure_wifi_if_enabled(vm) + if WIFI + case PROVIDER + when "virtualbox" + configure_wifi_vbox_networking(vm) +# TODO(lucian-serb): Configure networking on Wi-Fi for other hypervisors. +# when "libvirt" +# configure_wifi_libvirt_networking(vm) + end + end +end Vagrant.configure(2) do |config| config.vm.box = get_default(:base_image) @@ -120,7 +158,12 @@ Vagrant.configure(2) do |config| # nodes attached. Plus, each node receives a 3rd adapter connected to the # outside public network. config.vm.network "private_network", type: "dhcp" - config.vm.network "public_network", dev: get_default(:bridge_interface), mode: 'bridge', type: 'bridge' + # On VirtualBox hosts with Wi-Fi, do not create a public bridged interface. + # A NAT-Network will be used instead. + # TODO(lucian-serb): Do the same for other hypervisors as well? + unless PROVIDER == "virtualbox" && WIFI + config.vm.network "public_network", dev: get_default(:bridge_interface), mode: 'bridge', type: 'bridge' + end my_privatekey = File.read(File.join(vagrant_dir, "vagrantkey")) my_publickey = File.read(File.join(vagrant_dir, "vagrantkey.pub")) @@ -170,6 +213,7 @@ Vagrant.configure(2) do |config| if PROVIDER == "libvirt" vm.graphics_ip = GRAPHICSIP end + configure_wifi_if_enabled(vm) end admin.hostmanager.aliases = "operator" end @@ -190,6 +234,7 @@ Vagrant.configure(2) do |config| if PROVIDER == "libvirt" vm.graphics_ip = GRAPHICSIP end + configure_wifi_if_enabled(vm) end node.hostmanager.aliases = hostname end diff --git a/dev/vagrant/Vagrantfile.custom.example b/dev/vagrant/Vagrantfile.custom.example index 0ca315f27b..09af72f5b4 100644 --- a/dev/vagrant/Vagrantfile.custom.example +++ b/dev/vagrant/Vagrantfile.custom.example @@ -49,6 +49,12 @@ # } # } +# Whether the host network adapter is Wi-Fi. +# On VirtualBox, the user must first manually create a NAT-Network +# named OSNetwork. The default network CIDR must be changed. +# The Neutron external interface will be connected to this Network. +# WIFI = false + # Whether to do Multi-node or All-in-One deployment # MULTINODE = false