[openstack-dev] [nova][neutron] Update on os-vif progress (port binding negotiation)
jaypipes at gmail.com
Thu Feb 18 15:33:09 UTC 2016
Apologies for the delay in getting this update email out to everyone.
We are making good progress on the os-vif library and plugin system. We
have immediate goals for Mitaka, all of which are in progress and on
track to complete by Feature Freeze.
Over the course of the last two years, a number of proposals were put
forth to increase the velocity of development in Nova around new virtual
interface types. Nova core contributors generally are not networking
experts and the engineers familiar with network interface setup were
frustrated with the slow pace of reviews in Nova whenever they wanted to
add or extend functionality.
After much debate, we settled on a proposal to create an os-vif Python
library that would allow these network-focused contributors to maintain
and enhance the code for virtual interface plugging separate from Nova.
VIF types would be loaded as stevedore plugins, enabling easier addition
of new VIF types and enhancements of existing ones.
In addition to developer velocity, the creation of the os-vif library
was a perfect opportunity for the Nova developers to clean up and
standardize the object modeling currently in use to represent virtual
interfaces and networking objects in Nova. The os_vif.objects.VIF object
model uses *versioned* objects now, enabling a future structured
evolution of the data interchange format between Nova and Neutron. This
interchange of information is typically called "port binding
negotiation" and has been the source of a lot of spaghetti code both in
Nova and Neutron. The move to a versioned objects interchange format
will dramatically reduce the lines of code needed for this port binding
negotiation and simplify this part of Nova.
The team has the following goals for Mitaka:
* Ensuring the os-vif library is complete and fully unit-tested
* Ensuring the reference plugin implementations (OVS and LinuxBridge)
are in the os-vif code tree and also fully unit-tested
* Replacing the plug() and unplug() code in Nova for the OVS and
LinuxBridge VIF types
* Submitting changes to devstack and project-config that install os-vif,
enable the OVS and LinuxBridge plugins, and run a full set of Tempest
functional tests to validate the interactions between Nova and os-vif
For Newton, we will be pushing for the following:
* Blueprint and implementation of changes in Neutron to send a set of
serialized os_vif.objects.VIF objects back to Nova instead of the
current port:binding mess (this is what is referred to as the "port
binding negotiation process")
* Swapping out more of the non-LinuxBridge, non-OVS VIF type
implementations in Nova's vif.py with calls to os_vif.[un]plug()
Full gate test coverage of more of the plugins
We have an os-vif-core team that has been reviewing and merging code in
the os-vif main source repository . Dan Berrange, Sean Mooney, Moshe
Levi, and Sahid Ferdjaoui have done the bulk of the work in bringing the
prototype library I had put together on GitHub into the OpenStack
git.openstack.org repository. Thank you guys very much!
Dan has a work-in-progess patch to Nova  that replaces some of the
code in nova/virt/libvirt/vif.py with calls to os_vif.
From our Mirantis team, I've asked Sergey Belous to handle any
necessary changes to devstack and project-config (for a functional test
gate check job).
Myself, I continue to do my best to get through code reviews for
additions to the os-vif library.
If you are interested in joining the os-vif effort, please come find
danpb, jaypipes, sahid, sean.k.mooney or MosheLevi on #openstack-nova or
#openstack-neutron on Freenode IRC.
Thanks for reading,
More information about the OpenStack-dev