def module_apply(self, context, modules=None): LOG.info(_("Applying modules.")) results = [] for module_data in modules: module = module_data['module'] id = module.get('id', None) module_type = module.get('type', None) name = module.get('name', None) tenant = module.get('tenant', None) datastore = module.get('datastore', None) ds_version = module.get('datastore_version', None) contents = module.get('contents', None) md5 = module.get('md5', None) auto_apply = module.get('auto_apply', True) visible = module.get('visible', True) if not name: raise AttributeError(_("Module name not specified")) if not contents: raise AttributeError(_("Module contents not specified")) driver = self.module_driver_manager.get_driver(module_type) if not driver: raise exception.ModuleTypeNotFound( _("No driver implemented for module type '%s'") % module_type) result = module_manager.ModuleManager.apply_module( driver, module_type, name, tenant, datastore, ds_version, contents, id, md5, auto_apply, visible) results.append(result) LOG.info(_("Returning list of modules: %s") % results) return results
def create(context, name, module_type, contents, description, tenant_id, datastore, datastore_version, auto_apply, visible, live_update): if module_type.lower() not in Modules.VALID_MODULE_TYPES: LOG.error("Valid module types: %s" % Modules.VALID_MODULE_TYPES) raise exception.ModuleTypeNotFound(module_type=module_type) Module.validate_action( context, 'create', tenant_id, auto_apply, visible) datastore_id, datastore_version_id = Module.validate_datastore( datastore, datastore_version) if Module.key_exists( name, module_type, tenant_id, datastore_id, datastore_version_id): datastore_str = datastore_id or Modules.MATCH_ALL_NAME ds_version_str = datastore_version_id or Modules.MATCH_ALL_NAME raise exception.ModuleAlreadyExists( name=name, datastore=datastore_str, ds_version=ds_version_str) md5, processed_contents = Module.process_contents(contents) module = DBModule.create( name=name, type=module_type.lower(), contents=processed_contents, description=description, tenant_id=tenant_id, datastore_id=datastore_id, datastore_version_id=datastore_version_id, auto_apply=auto_apply, visible=visible, live_update=live_update, md5=md5) return module
def module_apply(self, context, modules=None): LOG.info("Applying modules.") results = [] modules = [data['module'] for data in modules] try: # make sure the modules are applied in the correct order modules.sort(key=operator.itemgetter('apply_order')) modules.sort(key=operator.itemgetter('priority_apply'), reverse=True) except KeyError: # If we don't have ordering info then maybe we're running # a version of the module feature before ordering was # introduced. In that case, since we don't have any # way to order the modules we should just continue. pass for module in modules: id = module.get('id', None) module_type = module.get('type', None) name = module.get('name', None) tenant = module.get('tenant', self.MODULE_APPLY_TO_ALL) datastore = module.get('datastore', self.MODULE_APPLY_TO_ALL) ds_version = module.get('datastore_version', self.MODULE_APPLY_TO_ALL) contents = module.get('contents', None) md5 = module.get('md5', None) auto_apply = module.get('auto_apply', True) visible = module.get('visible', True) is_admin = module.get('is_admin', None) if is_admin is None: # fall back to the old method of checking for an admin option is_admin = (tenant == self.MODULE_APPLY_TO_ALL or not visible or auto_apply) if not name: raise AttributeError(_("Module name not specified")) if not contents: raise AttributeError(_("Module contents not specified")) driver = self.module_driver_manager.get_driver(module_type) if not driver: raise exception.ModuleTypeNotFound( _("No driver implemented for module type '%s'") % module_type) if (datastore and datastore != self.MODULE_APPLY_TO_ALL and datastore != CONF.datastore_manager): reason = (_("Module not valid for datastore %s") % CONF.datastore_manager) raise exception.ModuleInvalid(reason=reason) result = module_manager.ModuleManager.apply_module( driver, module_type, name, tenant, datastore, ds_version, contents, id, md5, auto_apply, visible, is_admin) results.append(result) LOG.info("Returning list of modules: %s", results) return results
def module_remove(self, context, module=None): LOG.info("Removing module.") module = module['module'] id = module.get('id', None) module_type = module.get('type', None) name = module.get('name', None) datastore = module.get('datastore', None) ds_version = module.get('datastore_version', None) if not name: raise AttributeError(_("Module name not specified")) driver = self.module_driver_manager.get_driver(module_type) if not driver: raise exception.ModuleTypeNotFound( _("No driver implemented for module type '%s'") % module_type) module_manager.ModuleManager.remove_module(driver, module_type, id, name, datastore, ds_version) LOG.info("Deleted module: %s", name)
def create(context, name, module_type, contents, description, tenant_id, datastore, datastore_version, auto_apply, visible, live_update, priority_apply, apply_order, full_access): if module_type.lower() not in Modules.VALID_MODULE_TYPES: LOG.error(_("Valid module types: %s"), Modules.VALID_MODULE_TYPES) raise exception.ModuleTypeNotFound(module_type=module_type) Module.validate_action( context, 'create', tenant_id, auto_apply, visible, priority_apply, full_access) datastore_id, datastore_version_id = ( datastore_models.get_datastore_or_version( datastore, datastore_version)) if Module.key_exists( name, module_type, tenant_id, datastore_id, datastore_version_id): datastore_str = datastore_id or Modules.MATCH_ALL_NAME ds_version_str = datastore_version_id or Modules.MATCH_ALL_NAME raise exception.ModuleAlreadyExists( name=name, datastore=datastore_str, ds_version=ds_version_str) md5, processed_contents = Module.process_contents(contents) is_admin = context.is_admin if full_access: is_admin = 0 module = DBModule.create( name=name, type=module_type.lower(), contents=processed_contents, description=description, tenant_id=tenant_id, datastore_id=datastore_id, datastore_version_id=datastore_version_id, auto_apply=auto_apply, visible=visible, live_update=live_update, priority_apply=priority_apply, apply_order=apply_order, is_admin=is_admin, md5=md5) return module