def create(self, req, body, tenant_id): name = body['module']['name'] LOG.info("Creating module '%s'", name) context = req.environ[wsgi.CONTEXT_KEY] policy.authorize_on_tenant(context, 'module:create') module_type = body['module']['module_type'] contents = body['module']['contents'] description = body['module'].get('description') all_tenants = body['module'].get('all_tenants', 0) module_tenant_id = None if all_tenants else tenant_id datastore = body['module'].get('datastore', {}).get('type', None) ds_version = body['module'].get('datastore', {}).get('version', None) auto_apply = body['module'].get('auto_apply', 0) visible = body['module'].get('visible', 1) live_update = body['module'].get('live_update', 0) priority_apply = body['module'].get('priority_apply', 0) apply_order = body['module'].get('apply_order', 5) full_access = body['module'].get('full_access', None) module = models.Module.create(context, name, module_type, contents, description, module_tenant_id, datastore, ds_version, auto_apply, visible, live_update, priority_apply, apply_order, full_access) view_data = views.DetailedModuleView(module) return wsgi.Result(view_data.data(), 200)
def update(self, req, body, tenant_id, id): LOG.info(_("Updating module %s") % id) context = req.environ[wsgi.CONTEXT_KEY] module = models.Module.load(context, id) self.authorize_module_action(context, 'update', module) original_module = copy.deepcopy(module) if 'name' in body['module']: module.name = body['module']['name'] if 'module_type' in body['module']: module.type = body['module']['module_type'] if 'contents' in body['module']: module.contents = body['module']['contents'] if 'description' in body['module']: module.description = body['module']['description'] if 'all_tenants' in body['module']: module.tenant_id = (None if body['module']['all_tenants'] else tenant_id) if 'datastore' in body['module']: if 'type' in body['module']['datastore']: module.datastore_id = body['module']['datastore']['type'] if 'version' in body['module']['datastore']: module.datastore_version_id = ( body['module']['datastore']['version']) if 'auto_apply' in body['module']: module.auto_apply = body['module']['auto_apply'] if 'visible' in body['module']: module.visible = body['module']['visible'] if 'live_update' in body['module']: module.live_update = body['module']['live_update'] models.Module.update(context, module, original_module) view_data = views.DetailedModuleView(module) return wsgi.Result(view_data.data(), 200)
def update(self, req, body, tenant_id, id): LOG.info("Updating module %s.", id) context = req.environ[wsgi.CONTEXT_KEY] module = models.Module.load(context, id) self.authorize_module_action(context, 'update', module) original_module = copy.deepcopy(module) if 'name' in body['module']: module.name = body['module']['name'] if 'module_type' in body['module']: module.type = body['module']['module_type'] if 'contents' in body['module']: module.contents = body['module']['contents'] if 'description' in body['module']: module.description = body['module']['description'] if 'all_tenants' in body['module']: module.tenant_id = (None if body['module']['all_tenants'] else tenant_id) ds_changed = False ds_ver_changed = False if 'datastore' in body['module']: if 'type' in body['module']['datastore']: module.datastore_id = body['module']['datastore']['type'] ds_changed = True if 'version' in body['module']['datastore']: module.datastore_version_id = ( body['module']['datastore']['version']) ds_ver_changed = True if 'all_datastores' in body['module']: if ds_changed: raise exception.ModuleInvalid( reason=_('You cannot set a datastore and specify ' '--all_datastores')) module.datastore_id = None if 'all_datastore_versions' in body['module']: if ds_ver_changed: raise exception.ModuleInvalid( reason=_('You cannot set a datastore version and specify ' '--all_datastore_versions')) module.datastore_version_id = None if 'auto_apply' in body['module']: module.auto_apply = body['module']['auto_apply'] if 'visible' in body['module']: module.visible = body['module']['visible'] if 'live_update' in body['module']: module.live_update = body['module']['live_update'] if 'priority_apply' in body['module']: module.priority_apply = body['module']['priority_apply'] if 'apply_order' in body['module']: module.apply_order = body['module']['apply_order'] full_access = None if 'full_access' in body['module']: full_access = body['module']['full_access'] models.Module.update(context, module, original_module, full_access) view_data = views.DetailedModuleView(module) return wsgi.Result(view_data.data(), 200)
def show(self, req, tenant_id, id): LOG.info(_("Showing module %s") % id) context = req.environ[wsgi.CONTEXT_KEY] module = models.Module.load(context, id) module.instance_count = len(models.InstanceModules.load( context, module_id=module.id, md5=module.md5)) return wsgi.Result( views.DetailedModuleView(module).data(), 200)
def module_remove(self, req, tenant_id, id, module_id): """Remove module from an instance.""" context = req.environ[wsgi.CONTEXT_KEY] instance = models.Instance.load(context, id) if not instance: raise exception.NotFound(uuid=id) module = module_models.Module.load(context, module_id) module_info = module_views.DetailedModuleView(module).data() client = create_guest_client(context, id) client.module_remove(module_info) instance_module = module_models.InstanceModule.load( context, instance_id=id, module_id=module_id) if instance_module: module_models.InstanceModule.delete(context, instance_module) return wsgi.Result(None, 200)
def module_remove(self, req, tenant_id, id, module_id): """Remove module from an instance.""" context = req.environ[wsgi.CONTEXT_KEY] instance = models.Instance.load(context, id) if not instance: raise exception.NotFound(uuid=id) self.authorize_instance_action(context, 'module_remove', instance) module = module_models.Module.load(context, module_id) module_info = module_views.DetailedModuleView(module).data() client = create_guest_client(context, id) client.module_remove(module_info) instance_modules = module_models.InstanceModules.load_all( context, instance_id=id, module_id=module_id) for instance_module in instance_modules: module_models.InstanceModule.delete(context, instance_module) LOG.debug("Deleted IM record %s (instance %s, module %s)." % (instance_module.id, id, module_id)) return wsgi.Result(None, 200)
def module_apply(self, req, body, tenant_id, id): """Apply modules to an instance.""" context = req.environ[wsgi.CONTEXT_KEY] instance = models.Instance.load(context, id) if not instance: raise exception.NotFound(uuid=id) module_ids = [mod['id'] for mod in body.get('modules', [])] modules = module_models.Modules.load_by_ids(context, module_ids) module_list = [] for module in modules: module.contents = module_models.Module.deprocess_contents( module.contents) module_info = module_views.DetailedModuleView(module).data( include_contents=True) module_list.append(module_info) client = create_guest_client(context, id) result_list = client.module_apply(module_list) models.Instance.add_instance_modules(context, id, modules) return wsgi.Result({'modules': result_list}, 200)
def create(self, req, body, tenant_id): name = body['module']['name'] LOG.info(_("Creating module '%s'") % name) context = req.environ[wsgi.CONTEXT_KEY] module_type = body['module']['module_type'] contents = body['module']['contents'] description = body['module'].get('description') all_tenants = body['module'].get('all_tenants', 0) module_tenant_id = None if all_tenants else tenant_id datastore = body['module'].get('datastore', {}).get('type', None) ds_version = body['module'].get('datastore', {}).get('version', None) auto_apply = body['module'].get('auto_apply', 0) visible = body['module'].get('visible', 1) live_update = body['module'].get('live_update', 0) module = models.Module.create(context, name, module_type, contents, description, module_tenant_id, datastore, ds_version, auto_apply, visible, live_update) view_data = views.DetailedModuleView(module) return wsgi.Result(view_data.data(), 200)