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