diff --git a/vmware_nsx/plugins/common/housekeeper/base_job.py b/vmware_nsx/plugins/common/housekeeper/base_job.py index b2a519f1f2..5dc4cc1800 100644 --- a/vmware_nsx/plugins/common/housekeeper/base_job.py +++ b/vmware_nsx/plugins/common/housekeeper/base_job.py @@ -25,12 +25,24 @@ LOG = log.getLogger(__name__) @six.add_metaclass(abc.ABCMeta) class BaseJob(object): + + _core_plugin = None + def __init__(self, readonly): self.readonly = readonly or (self.get_name() in cfg.CONF.nsxv.housekeeping_readonly_jobs) LOG.info('Housekeeping: %s job initialized in %s mode', self.get_name(), 'RO' if self.readonly else 'RW') - self.plugin = directory.get_plugin() + + @property + def plugin(self): + if not self._core_plugin: + self._core_plugin = directory.get_plugin() + if self._core_plugin.is_tvd_plugin() is True: + # get the plugin that match this driver + self._core_plugin = self.get_project_plugin( + self._core_plugin) + return self._core_plugin @abc.abstractmethod def get_name(self): @@ -43,3 +55,7 @@ class BaseJob(object): @abc.abstractmethod def run(self, context): pass + + @abc.abstractmethod + def get_project_plugin(self, plugin): + pass diff --git a/vmware_nsx/plugins/nsx/plugin.py b/vmware_nsx/plugins/nsx/plugin.py index 63aad8cbc7..8f569bcb91 100644 --- a/vmware_nsx/plugins/nsx/plugin.py +++ b/vmware_nsx/plugins/nsx/plugin.py @@ -685,3 +685,23 @@ class NsxTVDPlugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin, """ plugin_type = self.get_plugin_type_from_project(context, project_id) return self.plugins[plugin_type] + + def get_housekeeper(self, context, name, fields=None): + p = self._get_plugin_from_project(context, context.project_id) + if hasattr(p, 'housekeeper'): + return p.housekeeper.get(name) + msg = _("Housekeeper %s not found") % name + raise nsx_exc.NsxPluginException(err_msg=msg) + + def get_housekeepers(self, context, filters=None, fields=None, sorts=None, + limit=None, marker=None, page_reverse=False): + p = self._get_plugin_from_project(context, context.project_id) + if hasattr(p, 'housekeeper'): + return p.housekeeper.list() + return [] + + def update_housekeeper(self, context, name, housekeeper): + p = self._get_plugin_from_project(context, context.project_id) + if hasattr(p, 'housekeeper'): + p.housekeeper.run(context, name) + return p.housekeeper.get(name) diff --git a/vmware_nsx/plugins/nsx_v/housekeeper/error_backup_edge.py b/vmware_nsx/plugins/nsx_v/housekeeper/error_backup_edge.py index df780e7bc9..1918942b1e 100644 --- a/vmware_nsx/plugins/nsx_v/housekeeper/error_backup_edge.py +++ b/vmware_nsx/plugins/nsx_v/housekeeper/error_backup_edge.py @@ -20,6 +20,7 @@ from sqlalchemy.orm import exc as sa_exc from vmware_nsx.common import locking from vmware_nsx.common import nsxv_constants from vmware_nsx.db import nsxv_db +from vmware_nsx.extensions import projectpluginmap from vmware_nsx.plugins.common.housekeeper import base_job from vmware_nsx.plugins.nsx_v import availability_zones as nsx_az from vmware_nsx.plugins.nsx_v.vshield.common import constants as vcns_const @@ -32,6 +33,9 @@ class ErrorBackupEdgeJob(base_job.BaseJob): super(ErrorBackupEdgeJob, self).__init__(readonly) self.azs = nsx_az.NsxVAvailabilityZones() + def get_project_plugin(self, plugin): + return plugin.get_plugin_by_type(projectpluginmap.NsxPlugins.NSX_V) + def get_name(self): return 'error_backup_edge' diff --git a/vmware_nsx/plugins/nsx_v/housekeeper/error_dhcp_edge.py b/vmware_nsx/plugins/nsx_v/housekeeper/error_dhcp_edge.py index 860f595a0a..d06711754b 100644 --- a/vmware_nsx/plugins/nsx_v/housekeeper/error_dhcp_edge.py +++ b/vmware_nsx/plugins/nsx_v/housekeeper/error_dhcp_edge.py @@ -19,6 +19,7 @@ from oslo_utils import uuidutils from vmware_nsx.common import locking from vmware_nsx.db import nsxv_db +from vmware_nsx.extensions import projectpluginmap from vmware_nsx.plugins.common.housekeeper import base_job from vmware_nsx.plugins.nsx_v.vshield.common import constants as vcns_const @@ -26,6 +27,10 @@ LOG = log.getLogger(__name__) class ErrorDhcpEdgeJob(base_job.BaseJob): + + def get_project_plugin(self, plugin): + return plugin.get_plugin_by_type(projectpluginmap.NsxPlugins.NSX_V) + def get_name(self): return 'error_dhcp_edge'