Example #1
0
 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
Example #2
0
 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
Example #3
0
 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
Example #4
0
 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)
Example #5
0
 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