8d7c0d548d
The usage doc stated that plug and unplug accept a single argument of type `os_vif.objects.VIF`, which isn't a thing, and then went on to give an example showing that they take two. The usage doc and the plug and unplug docstrings also listed various objects at the wrong paths (e.g. the `instance_info` param being of type `os_vif.objects.InstanceInfo`, which also isn't a thing). Fixed up the usage doc to list both arguments and correct the references in the sample code; and fixed the plug/unplug docstrings to list the proper paths to classes: os_vif.objects.vif.VIFBase and os_vif.objects.instance_info.InstanceInfo. Made everything in `single backticks` into a proper rst ``literal``. Change-Id: I400838bbe9663917fe2c64f52975b77a370405b4
92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import abc
|
|
from oslo_config import cfg
|
|
import six
|
|
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
@six.add_metaclass(abc.ABCMeta)
|
|
class PluginBase(object):
|
|
"""Base class for all VIF plugins."""
|
|
|
|
# Override to provide a tuple of oslo_config.Opt instances for
|
|
# the plugin config parameters
|
|
CONFIG_OPTS = ()
|
|
|
|
def __init__(self, config):
|
|
"""
|
|
Initialize the plugin object with the provided config
|
|
|
|
:param config: ``oslo_config.ConfigOpts.GroupAttr`` instance:
|
|
"""
|
|
self.config = config
|
|
|
|
@abc.abstractmethod
|
|
def describe(self):
|
|
"""
|
|
Return an object that describes the plugin's supported vif types and
|
|
the earliest/latest known VIF object versions.
|
|
|
|
:returns: A ``os_vif.objects.host_info.HostPluginInfo`` instance
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def plug(self, vif, instance_info):
|
|
"""
|
|
Given a model of a VIF, perform operations to plug the VIF properly.
|
|
|
|
:param vif: ``os_vif.objects.vif.VIFBase`` object.
|
|
:param instance_info: ``os_vif.objects.instance_info.InstanceInfo``
|
|
object.
|
|
:raises ``processutils.ProcessExecutionError``. Plugins implementing
|
|
this method should let `processutils.ProcessExecutionError`
|
|
bubble up.
|
|
"""
|
|
|
|
@abc.abstractmethod
|
|
def unplug(self, vif, instance_info):
|
|
"""
|
|
Given a model of a VIF, perform operations to unplug the VIF properly.
|
|
|
|
:param vif: ``os_vif.objects.vif.VIFBase`` object.
|
|
:param instance_info: ``os_vif.objects.instance_info.InstanceInfo``
|
|
object.
|
|
:raises ``processutils.ProcessExecutionError``. Plugins implementing
|
|
this method should let ``processutils.ProcessExecutionError``
|
|
bubble up.
|
|
"""
|
|
|
|
@classmethod
|
|
def load(cls, plugin_name):
|
|
"""
|
|
Load a plugin, registering its configuration options
|
|
|
|
:param plugin_name: the name of the plugin extension
|
|
|
|
:returns: an initialized instance of the class
|
|
"""
|
|
cfg_group_name = "os_vif_" + plugin_name
|
|
cfg_opts = getattr(cls, "CONFIG_OPTS")
|
|
cfg_vals = None
|
|
if cfg_opts and len(cfg_opts) > 0:
|
|
cfg_group = cfg.OptGroup(
|
|
cfg_group_name,
|
|
"os-vif plugin %s options" % plugin_name)
|
|
CONF.register_opts(cfg_opts, group=cfg_group)
|
|
|
|
cfg_vals = getattr(CONF, cfg_group_name)
|
|
return cls(cfg_vals)
|