66 lines
2.2 KiB
Python
Executable File
66 lines
2.2 KiB
Python
Executable File
#
|
|
# Copyright (c) 2015-2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
import six
|
|
import stevedore
|
|
|
|
from nfv_common import debug
|
|
from nfv_common.helpers import Singleton
|
|
|
|
DLOG = debug.debug_get_logger('nfv_common.catalog.catalog_backend')
|
|
|
|
|
|
@six.add_metaclass(Singleton)
|
|
class CatalogBackend(stevedore.named.NamedExtensionManager):
|
|
"""
|
|
Catalog Backend
|
|
"""
|
|
_version = '1.0.0'
|
|
_signature = '7926ef8d-b04c-4f5b-8627-f40f59fd8d11'
|
|
|
|
def __init__(self, plugin_namespace, plugin_name):
|
|
super(CatalogBackend, self).__init__(plugin_namespace, plugin_name,
|
|
invoke_on_load=True,
|
|
invoke_args=(), invoke_kwds={})
|
|
self.plugin = None
|
|
|
|
for plugin in self:
|
|
if self.valid_plugin(plugin):
|
|
self.plugin = plugin
|
|
DLOG.info("Loaded plugin %s version %s provided by %s."
|
|
% (plugin.obj.name, plugin.obj.version,
|
|
plugin.obj.provider))
|
|
break
|
|
|
|
@staticmethod
|
|
def valid_plugin(plugin):
|
|
"""Verify signature of plugin is valid """
|
|
if CatalogBackend._signature == plugin.obj.signature:
|
|
return True
|
|
else:
|
|
DLOG.info("Plugin %s version %s from provider %s has an invalid "
|
|
"signature." % (plugin.obj.name, plugin.obj.version,
|
|
plugin.obj.provider))
|
|
return False
|
|
|
|
def read_vnf_descriptor(self, vnfd_id, vnf_vendor, vnf_version):
|
|
"""Read a particular vnf descriptor """
|
|
vnfd_record = None
|
|
if self.plugin is not None:
|
|
vnfd_record = self.plugin.obj.read_vnf_descriptor(vnfd_id,
|
|
vnf_vendor,
|
|
vnf_version)
|
|
return vnfd_record
|
|
|
|
def initialize(self):
|
|
"""Initialize plugin """
|
|
if self.plugin is not None:
|
|
self.plugin.obj.initialize(self._version)
|
|
|
|
def finalize(self):
|
|
"""Finalize plugin """
|
|
if self.plugin is not None:
|
|
self.plugin.obj.finalize()
|