Fix Bug Unable to get scoped data model
This patch removes 'audit_scope' from __init__ of BaseClusterDataModelCollector class, as it is a singleton class and cannot be instantiate more than once. A new method is defined in BaseClusterDataModelCollector in place of property audit_scope_handler, which takes audit_scope as argument. Change-Id: I0664c151d71a711c118d43c180d8b0760b1c81fa Closes-Bug: #1732849
This commit is contained in:
@@ -123,19 +123,13 @@ class BaseClusterDataModelCollector(loadable.LoadableSingleton):
|
||||
|
||||
STALE_MODEL = model_root.ModelRoot(stale=True)
|
||||
|
||||
def __init__(self, config, osc=None, audit_scope=None):
|
||||
def __init__(self, config, osc=None):
|
||||
super(BaseClusterDataModelCollector, self).__init__(config)
|
||||
self.osc = osc if osc else clients.OpenStackClients()
|
||||
self._cluster_data_model = None
|
||||
self.lock = threading.RLock()
|
||||
self._audit_scope = audit_scope
|
||||
self._audit_scope_handler = None
|
||||
|
||||
@abc.abstractproperty
|
||||
def audit_scope_handler(self):
|
||||
"""Get audit scope handler"""
|
||||
raise NotImplementedError()
|
||||
|
||||
@property
|
||||
def cluster_data_model(self):
|
||||
if self._cluster_data_model is None:
|
||||
@@ -163,6 +157,11 @@ class BaseClusterDataModelCollector(loadable.LoadableSingleton):
|
||||
def set_cluster_data_model_as_stale(self):
|
||||
self.cluster_data_model = self.STALE_MODEL
|
||||
|
||||
@abc.abstractmethod
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
"""Get audit scope handler"""
|
||||
raise NotImplementedError()
|
||||
|
||||
@abc.abstractmethod
|
||||
def execute(self):
|
||||
"""Build a cluster data model"""
|
||||
|
||||
@@ -37,10 +37,6 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
def __init__(self, config, osc=None):
|
||||
super(CinderClusterDataModelCollector, self).__init__(config, osc)
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
"""Associated notification endpoints
|
||||
@@ -58,6 +54,9 @@ class CinderClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
cinder.VolumeResizeEnd(self)
|
||||
]
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
return None
|
||||
|
||||
def execute(self):
|
||||
"""Build the storage cluster data model"""
|
||||
LOG.debug("Building latest Cinder cluster data model")
|
||||
|
||||
@@ -50,17 +50,15 @@ class CollectorManager(object):
|
||||
|
||||
return self._notification_endpoints
|
||||
|
||||
def get_cluster_model_collector(self, name, osc=None, audit_scope=None):
|
||||
def get_cluster_model_collector(self, name, osc=None):
|
||||
"""Retrieve cluster data model collector
|
||||
|
||||
:param name: name of the cluster data model collector plugin
|
||||
:type name: str
|
||||
:param osc: an OpenStackClients instance
|
||||
:type osc: :py:class:`~.OpenStackClients` instance
|
||||
:param audit_scope: an BaseScope instance
|
||||
:type audit_scope: :py:class:`~.BaseScope` instance
|
||||
:returns: cluster data model collector plugin
|
||||
:rtype: :py:class:`~.BaseClusterDataModelCollector`
|
||||
"""
|
||||
return self.collector_loader.load(
|
||||
name, osc=osc, audit_scope=audit_scope)
|
||||
name, osc=osc)
|
||||
|
||||
@@ -139,13 +139,6 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
def __init__(self, config, osc=None):
|
||||
super(NovaClusterDataModelCollector, self).__init__(config, osc)
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
if not self._audit_scope_handler:
|
||||
self._audit_scope_handler = compute_scope.ComputeScope(
|
||||
self._audit_scope, self.config)
|
||||
return self._audit_scope_handler
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
"""Associated notification endpoints
|
||||
@@ -166,6 +159,11 @@ class NovaClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
nova.LegacyLiveMigratedEnd(self),
|
||||
]
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
self._audit_scope_handler = compute_scope.ComputeScope(
|
||||
audit_scope, self.config)
|
||||
return self._audit_scope_handler
|
||||
|
||||
def execute(self):
|
||||
"""Build the compute cluster data model"""
|
||||
LOG.debug("Building latest Nova cluster data model")
|
||||
|
||||
@@ -179,8 +179,9 @@ class BaseStrategy(loadable.Loadable):
|
||||
"""
|
||||
if self._compute_model is None:
|
||||
collector = self.collector_manager.get_cluster_model_collector(
|
||||
'compute', osc=self.osc, audit_scope=self.audit_scope)
|
||||
audit_scope_handler = collector.audit_scope_handler
|
||||
'compute', osc=self.osc)
|
||||
audit_scope_handler = collector.get_audit_scope_handler(
|
||||
audit_scope=self.audit_scope)
|
||||
self._compute_model = audit_scope_handler.get_scoped_model(
|
||||
collector.get_latest_cluster_data_model())
|
||||
|
||||
|
||||
@@ -23,14 +23,13 @@ from watcher.tests import base as test_base
|
||||
|
||||
class DummyClusterDataModelCollector(base.BaseClusterDataModelCollector):
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
return []
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
return None
|
||||
|
||||
def execute(self):
|
||||
model = model_root.ModelRoot()
|
||||
# Do something here...
|
||||
|
||||
@@ -32,14 +32,13 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
config = mock.Mock()
|
||||
super(FakerModelCollector, self).__init__(config)
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
return []
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
return None
|
||||
|
||||
def execute(self):
|
||||
return self.generate_scenario_1()
|
||||
|
||||
|
||||
@@ -32,10 +32,6 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
config = mock.Mock(period=777)
|
||||
super(FakerModelCollector, self).__init__(config)
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
return []
|
||||
@@ -52,6 +48,9 @@ class FakerModelCollector(base.BaseClusterDataModelCollector):
|
||||
def load_model(self, filename):
|
||||
return modelroot.ModelRoot.from_xml(self.load_data(filename))
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
return None
|
||||
|
||||
def execute(self):
|
||||
return self._cluster_data_model or self.build_scenario_1()
|
||||
|
||||
@@ -148,10 +147,6 @@ class FakerStorageModelCollector(base.BaseClusterDataModelCollector):
|
||||
config = mock.Mock(period=777)
|
||||
super(FakerStorageModelCollector, self).__init__(config)
|
||||
|
||||
@property
|
||||
def audit_scope_handler(self):
|
||||
return None
|
||||
|
||||
@property
|
||||
def notification_endpoints(self):
|
||||
return []
|
||||
@@ -168,6 +163,9 @@ class FakerStorageModelCollector(base.BaseClusterDataModelCollector):
|
||||
def load_model(self, filename):
|
||||
return modelroot.StorageModelRoot.from_xml(self.load_data(filename))
|
||||
|
||||
def get_audit_scope_handler(self, audit_scope):
|
||||
return None
|
||||
|
||||
def execute(self):
|
||||
return self._cluster_data_model or self.build_scenario_1()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user