Integration library between network (Neutron) and compute (Nova) providers
Go to file
Daniel P. Berrange 9686110d53 os-vif: introduce a ComputeInfo object to represent compute info
When a compute service is allocating ports with the network service,
it needs to pass across information about the capabilities of the
compute host. Currently each plugin provides information about its
own capabilities. This introduces a ComputeInfo class which,
initially, just contains a dict of PluginInfo classes.

With this change, there is a versioning constraint between the
compute and network hosts. The compute host must not pass the network
host a ComputeInfo object with a version that the network host
is unable to deserialize(). This implies that as a general rule the
version of os-vif on the network host must be at least as new as the
version on the compute hosts. During a live upgrade, the network
hosts must be upgraded before the compute hosts.

Change-Id: I7b51c97b5e03ffa51a56ceb3d4f97e188508379d
2016-03-18 13:37:33 +00:00
doc/source Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
os_vif os-vif: introduce a ComputeInfo object to represent compute info 2016-03-18 13:37:33 +00:00
vif_plug_linux_bridge os-vif: introduce a ComputeInfo object to represent compute info 2016-03-18 13:37:33 +00:00
vif_plug_ovs os-vif: introduce a ComputeInfo object to represent compute info 2016-03-18 13:37:33 +00:00
.coveragerc Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
.gitignore Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
.gitreview Added .gitreview 2015-11-11 16:10:58 +00:00
.mailmap Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
.testr.conf Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
babel.cfg Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
CONTRIBUTING.rst Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
HACKING.rst Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
LICENSE Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
MANIFEST.in Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
openstack-common.conf Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
README.rst Provide plugins an oslo_config group for their setup 2016-02-16 11:06:58 +00:00
requirements.txt Provide plugins an oslo_config group for their setup 2016-02-16 11:06:58 +00:00
setup.cfg import openvswitch plugin implementation 2016-02-16 11:06:59 +00:00
setup.py Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
test-requirements.txt Import of code from https://github.com/jaypipes/os_vif 2016-01-13 12:56:01 -05:00
tox.ini tox: ignore E126, E127, E128 indentation checks 2016-01-28 16:12:21 +00:00

os-vif

A library for plugging and unplugging virtual interfaces in OpenStack.

Features

  • A base VIF plugin class that supplies a plug() and unplug() interface
  • Versioned objects that represent a virtual interface and its components

Usage

The interface to the os_vif library is very simple. To begin using the library, first call the os_vif.initialize() function. This will load all installed plugins and register the object model:

import os_vif

os_vif.initialize()

Once the os_vif library is initialized, there are only two other library functions: os_vif.plug() and os_vif.unplug(). Both methods accept a single argument of type `os_vif.objects.VIF`:

import uuid

from nova import objects as nova_objects
from os_vif import exception as vif_exc
from os_vif import objects as vif_objects
from os_vif import vnic_types

instance_uuid = 'd7a730ca-3c28-49c3-8f26-4662b909fe8a'
instance = nova_objects.Instance.get_by_uuid(instance_uuid)
instance_info = vif_objects.InstanceInfo(
    uuid=instance.uuid,
    name=instance.name,
    project_id=instance.project_id)

subnet = vif_objects.Subnet(cidr='192.168.1.0/24')
subnets = vif_objects.SubnetList([subnet])
network = vif_objects.Network(label='tenantnet',
                              subnets=subnets,
                              multi_host=False,
                              should_provide_vlan=False,
                              should_provide_bridge=False)

vif_uuid = uuid.uuid4()
vif = vif_objects.VIFVHostUser(id=vif_uuid,
                               address=None,
                               network=network,
                               plugin='vhostuser',
                               path='/path/to/socket',
                               mode=vif_objects.fields.VIFVHostUserMode.SERVER)

# Now do the actual plug operations to connect the VIF to
# the backing network interface.
try:
    os_vif.plug(vif)
except vif_exc.PlugException as err:
    # Handle the failure...

# If you are removing a virtual machine and its interfaces,
# you would use the unplug() operation:
try:
    os_vif.unplug(vif)
except vif_exc.UnplugException as err:
    # Handle the failure...