def update(self, req, body, tenant_id, id): LOG.info(_("Updating configuration for tenant id %s") % tenant_id) context = req.environ[wsgi.CONTEXT_KEY] group = models.Configuration.load(context, id) datastore_args = body["configuration"].get("datastore", {}) datastore, datastore_version = ds_models.get_datastore_version(**datastore_args) instances = instances_models.DBInstance.find_all( tenant_id=context.tenant, configuration_id=id, deleted=False ).all() # if name/description are provided in the request body, update the # model with these values as well. if "name" in body["configuration"]: group.name = body["configuration"]["name"] if "description" in body["configuration"]: group.description = body["configuration"]["description"] """validate if params are valid""" is_configuration_valid = False validation_result = KSC_ConfigurationsController.validate_configuration( context, body["configuration"]["values"], datastore_manager=datastore_version.manager ) if instances: current_config = KSC_Configuration.load(context, id) validation_dynamic_result = KSC_Configuration.validate_dynamic_params( context, current_config, instances, body["configuration"]["values"], dynamic_param=True ) if validation_result or validation_dynamic_result: if validation_dynamic_result: validation_result.update(validation_dynamic_result) elif not validation_result and not validation_dynamic_result: is_configuration_valid = True else: if not validation_result: is_configuration_valid = True result = {"is_validate_pass": is_configuration_valid, "validation_result": validation_result} if validation_result: return wsgi.Result(result, 400) else: deleted_at = datetime.utcnow() models.Configuration.remove_all_items(context, group.id, deleted_at) LOG.info(_("loaded configuration instances: %s") % instances) items = self.configuration_items_list(group, body["configuration"]) models.Configuration.save(context, group, items, instances) result["is_validate_pass"] = is_configuration_valid return wsgi.Result(result, 202)
def edit(self, req, body, tenant_id, id): context = req.environ[wsgi.CONTEXT_KEY] group = models.Configuration.load(context, id) datastore_args = body["configuration"].get("datastore", {}) datastore, datastore_version = ds_models.get_datastore_version(**datastore_args) instances = instances_models.DBInstance.find_all( tenant_id=context.tenant, configuration_id=id, deleted=False ).all() LOG.info(_("loaded configuration instances: %s") % instances) """validate if params are valid""" is_configuration_valid = False validation_result = KSC_ConfigurationsController.validate_configuration( context, body["configuration"]["values"], datastore_manager=datastore_version.manager ) if instances: current_config = KSC_Configuration.load(context, id) validation_dynamic_result = ( KSC_Configuration.validate_dynamic_params( context, current_config, instances, body["configuration"]["values"], dynamic_param=True ) or {} ) if validation_result or validation_dynamic_result: validation_result.update(validation_dynamic_result) elif not validation_result and not validation_dynamic_result: is_configuration_valid = True else: if not validation_result: is_configuration_valid = True result = {"is_validate_pass": is_configuration_valid, "validation_result": validation_result} if validation_result: return wsgi.Result(result, 400) else: items = self.configuration_items_list(group, body["configuration"]) models.Configuration.save(context, group, items, instances) result["is_validate_pass"] = is_configuration_valid return wsgi.Result(result, 202)