def test_version(self): current_version = Migrate.Version( ZMigrateVersion.SCHEMA_MAJOR, ZMigrateVersion.SCHEMA_MINOR, ZMigrateVersion.SCHEMA_REVISION, ) module_names = (name[:-3] for name in os.listdir(_migrate_path) if name.endswith(".py")) failures = [] for mname in module_names: module_path = "Products.ZenModel.migrate." + mname module = importlib.import_module(module_path) steps = ( cls for cls in (getattr(module, name) for name in dir(module)) if isinstance(cls, type) and issubclass(cls, Migrate.Step)) for step in steps: step_version = getattr(step, "version", None) if step_version and step_version > current_version: failures.append(module_path) expected = 0 actual = len(failures) self.assertEqual( expected, actual, msg="The following migrate script%s a version " "greater than %s: %s" % ( " has" if actual == 1 else "s have", current_version.short(), ', '.join(failures), ), )
class addIgnoreParametersWhenModeling(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): log.info("Adding ignoreParametersWhenModeling to all process classes.") for process_class in dmd.Processes.getSubOSProcessClassesSorted(): process_class.setZenProperty("addIgnoreParametersWhenModeling", False)
class removeClearHeartbeatsMenuItem(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): try: dmd.zenMenus.Manage.zenMenuItems._remove(dmd.zenMenus.Manage.zenMenuItems.clearHeartbeats) except AttributeError: pass # it didn't exist anyway
class discoveryMaxOidsPerRequest(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): try: disc = dmd.Devices.Discovered if not disc.isLocal('zMaxOIDPerRequest'): disc.setZenProperty('zMaxOIDPerRequest', 10) log.info("Setting zMaxOIDPerRequest to 10 on /Discovered") except (AttributeError, BadRequest): # they might not have discovery or this zproperty log.warn("Unable to set the zMaxOidsPerRequest on /Discovered")
class perDeviceCompCatalog(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): # Delete the old componentSearch if dmd.Devices.hasObject('componentSearch'): dmd.Devices._delObject('componentSearch') # Reindex components in the new per-device catalogs for device in dmd.Devices.getSubDevicesGen(): if not device.hasObject('componentSearch'): device._create_componentSearch()
class fixEmailNotificationClearSubjectFormat(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): log.info("Setting default values for E-mail notifications.") for notif in dmd.NotificationSubscriptions.objectValues(): if notif.action == "email": for content_key in ("clear_subject_format", "clear_body_format"): if BAD_STRING in notif.content.get(content_key, ""): notif._p_changed = True notif.content[content_key] = notif.content[ content_key].replace(BAD_STRING, "summary")
class zenmodelerModeledDevices(Migrate.Step): version = Migrate.Version(4, 2, 0) def cutover(self, dmd): rrdTemplate = dmd.Monitors.rrdTemplates.PerformanceConf dp = rrdTemplate.datasources.zenmodeler.datapoints._getOb(_MODELED_DEVICES_ID, None) if dp is None: log.info("Adding modeledDevices datapoint and graph.") dp = rrdTemplate.datasources.zenmodeler.manage_addRRDDataPoint(_MODELED_DEVICES_ID) dp.rrdtype = 'DERIVE' modeledDevicesGD = rrdTemplate.graphDefs._getOb(_MODELED_DEVICES_GRAPH_ID, None) if modeledDevicesGD is None: modeledDevicesGD = rrdTemplate.manage_addGraphDefinition(_MODELED_DEVICES_GRAPH_ID) modeledDevicesGD.units = 'devices / sec' modeledDevicesGD.manage_addDataPointGraphPoints(['zenmodeler_modeledDevices',])
class moveZepConfig(Migrate.Step): version = Migrate.Version(4, 2, 0) # translates zeneventserver.conf key to ZenConfig protocol buffer key _params = {"zep.aging.interval_milliseconds": "aging_interval_milliseconds", "zep.aging.limit": "aging_limit", "zep.archive.interval_milliseconds": "archive_interval_milliseconds", "zep.archive.limit": "archive_limit", "zep.index.summary.interval_milliseconds": "index_summary_interval_milliseconds", "zep.index.archive.interval_milliseconds": "index_archive_interval_milliseconds", "zep.index.limit": "index_limit", } def _read_from_conf(self, zeneventserver_conf): with open(zeneventserver_conf) as f: for raw_line in f: line = raw_line.strip() if not line or line.startswith("#"): continue parts = [p.strip() for p in line.split("=")] if len(parts) != 2: continue key, value = parts for param in self._params: if key == param: yield self._params[key], value break def cutover(self, dmd): zeneventserver_conf = zenPath("etc", "zeneventserver.conf") if not os.path.exists(zeneventserver_conf): return log.info("Moving parameters from zeneventserver.conf to zenoss_zep config table.") values = {} for config_name, config_value in self._read_from_conf(zeneventserver_conf): values[config_name] = config_value zep = getFacade('zep') zep.setConfigValues(values)
def main(): m = Migrate.Migration() m.main()