用法

os_vif 库的接口非常简单。要开始使用该库,首先调用 os_vif.initialize() 函数。这将加载所有已安装的插件并注册对象模型

import os_vif

os_vif.initialize()

一旦 os_vif 库被初始化,就只有另外两个库函数:os_vif.plug()os_vif.unplug()。两种方法都接受一个参数,类型为(os_vif.objects.vif.VIFBase 的子类)和一个参数,类型为 os_vif.objects.instance_info.InstanceInfo

import uuid

from nova import objects as nova_objects
from os_vif import exception as vif_exc
from os_vif.objects import fields
from os_vif.objects import instance_info
from os_vif.objects import network
from os_vif.objects import subnet as os_subnet
from os_vif.objects import vif as vif_obj

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

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

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

# Now do the actual plug operations to connect the VIF to
# the backing network interface.
try:
    os_vif.plug(vif, instance_info)
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, instance_info)
except vif_exc.UnplugException as err:
    # Handle the failure...