diff --git a/watcher/decision_engine/model/collector/base.py b/watcher/decision_engine/model/collector/base.py index f96fec92e..a0ff3e50c 100644 --- a/watcher/decision_engine/model/collector/base.py +++ b/watcher/decision_engine/model/collector/base.py @@ -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""" diff --git a/watcher/decision_engine/model/collector/cinder.py b/watcher/decision_engine/model/collector/cinder.py index 1e5c1c967..90dce70e3 100644 --- a/watcher/decision_engine/model/collector/cinder.py +++ b/watcher/decision_engine/model/collector/cinder.py @@ -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") diff --git a/watcher/decision_engine/model/collector/manager.py b/watcher/decision_engine/model/collector/manager.py index 023ea08aa..a606951c0 100644 --- a/watcher/decision_engine/model/collector/manager.py +++ b/watcher/decision_engine/model/collector/manager.py @@ -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) diff --git a/watcher/decision_engine/model/collector/nova.py b/watcher/decision_engine/model/collector/nova.py index 35b4a095e..1aa15dc57 100644 --- a/watcher/decision_engine/model/collector/nova.py +++ b/watcher/decision_engine/model/collector/nova.py @@ -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") diff --git a/watcher/decision_engine/strategy/strategies/base.py b/watcher/decision_engine/strategy/strategies/base.py index 4ec7a09d7..9a97b8fff 100644 --- a/watcher/decision_engine/strategy/strategies/base.py +++ b/watcher/decision_engine/strategy/strategies/base.py @@ -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()) diff --git a/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py b/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py index 40b726378..7b2ad3302 100644 --- a/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py +++ b/watcher/tests/decision_engine/cluster/test_cluster_data_model_collector.py @@ -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... diff --git a/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py b/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py index 9c5c646fb..71b0faea4 100644 --- a/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py +++ b/watcher/tests/decision_engine/model/faker_cluster_and_metrics.py @@ -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() diff --git a/watcher/tests/decision_engine/model/faker_cluster_state.py b/watcher/tests/decision_engine/model/faker_cluster_state.py index 680066ba3..fea754185 100644 --- a/watcher/tests/decision_engine/model/faker_cluster_state.py +++ b/watcher/tests/decision_engine/model/faker_cluster_state.py @@ -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()