Integrating OpenStack Neutron as a network provider in oVirt
We intend to add support for OpenStack Neutron as a network provider.
A network provider is an external provider that can provide networking capabilities for consumption by oVirt hosts and/or virtual machines. The network provider has the knowledge about the networks that it manages, and works autonomously from oVirt. The provider should enable integration on 3 points:
- Discovery of networks
- Provisioning of networks
- Provisioning of virtual NICs on the network
- Name: Mike Kolesnik
- Email: <email@example.com>
- Available in oVirt 3.3 as tech preview
- Last updated: October 9, 2015
There should be a way for oVirt to discover what networks are available on the provider. An oVirt user could then decide to import a network, that is provided by the provider, as a new one into a data center, or attach it to an existing data center network, marking that the network is also provided by this provider (in addition to any other provider that provides it).
Currently, the engine assumes that the networks provided by the provider are available on all hosts in the data center, but it might be possible to have this capability added so that we would be able to query the host and see if it is providing networks for a given provider.
The network can be exported from oVirt into the network provider, which means a user will be able to add the network to Neutron via oVirt, instead of using the Neutron API directly. However, from that moment on it will be as if the network was discovered from the provider - i.e. if it goes out of sync, that's OK from oVirt's perspective.
Virtual NIC provisioning
The network provider should be able to provision a virtual NIC's data (name, MAC, etc) on a network that it provides. oVirt would send the virtual NIC details over to the provider, and it should return the NIC connection details. These connection details should be used when the VM is run, or the NIC is plugged.
There should also be an option to "un-provision" a virtual NIC so that is being provisioned by the provider.
Please see Features/Detailed_OSN_Integration
Benefit to oVirt
- Ability to use various technologies that OpenStack Neutron provides for it's networks, such as IPAM, L3 Routing, Security Groups, etc.
- Ability to use technologies that aren't supported natively in oVirt (OVS, various controllers) for VM networks.
Dependencies / Related Features
- Add VDSM hooks for updateDevice or else, we cannot "rewire" a currently-running VM to an external network.
In order to test the feature follow these steps:
- Make sure to run the tests in the sequence they're written
- Install Neutron server & 'Linux Bridge' plugin per the steps at Features/Detailed_OSN_Integration
- Make sure you're using 'noauth' authentication to make things easier - no need to install Keystone at this point
- Make sure you're defining:
- tenant_network_type = vlan
- network_vlan_ranges = red:1:1000,blue:1001:2000,green
- Make sure hosts run in selinux=permissive mode (Neutron limitation)
- Add a couple of test networks to the neutron service via the API
|Test||Steps||Expected Result||Status||Post action|
|Providers in left tree||Open "External Providers" in the left tree||The Providers tab should open and be the only one|
|Add provider dialog||In the Providers main tab, click the "Add" button to add a new provider||
|Add provider validation||In the Add provider dialog, clear all fields and click OK||
||Enter the provider name|
|Plugin Type||Select the "OpenStack Network" provider type||
|Agent left tab||Pick one of the two preset "Plugin Type" values.||The "Agent Configuration" left tab should appear|
|Test button functionality||Click the "Test" button||You should get a negative result|
||You should get a positive result|
|No communication to provider||
||You should get a negative result||Restore communication to the Neutron service|
||You should get a negative result||Change back to the valid URL and make sure you get a "green" test result|
||You should see QPID parameters and interface mappings fields (total 5)||Fill the fields with the values you want sent to the hosts|
|Field consistency||Pick different values in the "Provider Type" and/or "Plugin Type" fields, then go back to "OpenStack Network" and "Linux Bridge".||Make sure the original values you filled in other fields haven't changed.|
|Saving the provider||Click "OK"||
|Edit provider dialog||
|Test button functionality||Check all the "new provider" tests for the test button||You should get exactly the same results as in the "new provider" scenario||Exit the dialog in the end, making sure the URL is still valid|
|Import networks dialog||
|Choosing networks to be imported||
|Cancelling network import||
|Importing a network||
|Import networks from Networks tab||
|Add new network on provider dialog||
|Selecting the provider||Select your provider||
|Adding the network||
|Adding a host with the provider||
|Adding a vNIC||
|Running the VM||Run the VM||
|vNIC properties on running VM||Pick the vNIC you added in the VM/interfaces subtab, and edit it.||
|Stopping the VM||Stop (forcefully) the VM||
|Migrating the VM (advanced)||Make sure the VM migrates correctly to another host that has the agent||The VM should migrate and the bridge and tap device should be on the other host|
Documentation / External references
- General purpose wiki: Network_Provider
Comments and Discussion
- Refer to Talk:Features/OSN_Integration