def put(self, request, *args, **kwargs): """ 修改存储设置 :param request: :param args: :param kwargs: :return: """ # try: volume_id = kwargs.get("volume_id", None) new_volume_path = request.data.get("new_volume_path", None) new_file_content = request.data.get("new_file_content", None) if not volume_id: return Response(general_message(400, "volume_id is null", "未指定需要编辑的配置文件存储"), status=400) volume = volume_repo.get_service_volume_by_pk(volume_id) if not volume: return Response(general_message(400, "volume is null", "存储不存在"), status=400) mode = request.data.get("mode") if mode is not None: mode = ensure_volume_mode(mode) service_config = volume_repo.get_service_config_file(volume) if volume.volume_type == 'config-file': if not service_config: return Response(general_message(400, "file_content is null", "配置文件内容不存在"), status=400) if new_volume_path == volume.volume_path and new_file_content == service_config.file_content and volume.mode == mode: return Response(general_message(400, "no change", "没有变化,不需要修改"), status=400) else: if new_volume_path == volume.volume_path: return Response(general_message(400, "no change", "没有变化,不需要修改"), status=400) data = { "volume_name": volume.volume_name, "volume_path": new_volume_path, "volume_type": volume.volume_type, "file_content": new_file_content, "operator": self.user.nick_name, "mode": mode, } res, body = region_api.upgrade_service_volumes( self.service.service_region, self.tenant.tenant_name, self.service.service_alias, data) if res.status == 200: volume.volume_path = new_volume_path if mode is not None: volume.mode = mode volume.save() if volume.volume_type == 'config-file': service_config.file_content = new_file_content service_config.save() result = general_message(200, "success", "修改成功") return Response(result, status=result["code"]) return Response(general_message(405, "success", "修改失败"), status=405)
def delete_service_volume_by_id(self, tenant, service, volume_id, user_name=''): volume = volume_repo.get_service_volume_by_pk(volume_id) if not volume: return 404, "需要删除的路径不存在", None # if volume.volume_type == volume.SHARE: # 判断当前共享目录是否被使用 mnt = mnt_repo.get_mnt_by_dep_id_and_mntname(service.service_id, volume.volume_name) if mnt: return 403, "当前路径被共享,无法删除", None if service.create_status == "complete": data = dict() data["operator"] = user_name try: res, body = region_api.delete_service_volumes( service.service_region, tenant.tenant_name, service.service_alias, volume.volume_name, tenant.enterprise_id, data) logger.debug( "service {0} delete volume {1}, result {2}".format( service.service_cname, volume.volume_name, body)) except region_api.CallApiError as e: if e.status != 404: raise ServiceHandleException( msg="delete volume from region failure", msg_show="从集群删除存储发生错误", status_code=500) volume_repo.delete_volume_by_id(volume_id) volume_repo.delete_file_by_volume(volume) return 200, "success", volume
def delete_service_mnt_relation(self, tenant, service, dep_vol_id): dep_volume = volume_repo.get_service_volume_by_pk(dep_vol_id) try: if service.create_status == "complete": data = { "depend_service_id": dep_volume.service_id, "volume_name": dep_volume.volume_name, "enterprise_id": tenant.tenant_name } res, body = region_api.delete_service_dep_volumes( service.service_region, tenant.tenant_name, service.service_alias, data) logger.debug( "delete service mnt info res:{0}, body {1}".format( res, body)) mnt_repo.delete_mnt_relation(service.service_id, dep_volume.service_id, dep_volume.volume_name) except region_api.CallApiError as e: logger.exception(e) if e.status == 404: logger.debug( 'service mnt relation not in region then delete rel directly in console' ) mnt_repo.delete_mnt_relation(service.service_id, dep_volume.service_id, dep_volume.volume_name) return 200, "success"
def put(self, request, *args, **kwargs): """ 修改存储设置 :param request: :param args: :param kwargs: :return: """ try: volume_id = kwargs.get("volume_id", None) new_volume_path = request.data.get("new_volume_path", None) new_file_content = request.data.get("new_file_content", None) if not volume_id: return Response(general_message(400, "volume_id is null", u"未指定需要编辑的配置文件存储"), status=400) volume = volume_repo.get_service_volume_by_pk(volume_id) if not volume: return Response(general_message(400, "volume is null", u"存储不存在"), status=400) service_config = volume_repo.get_service_config_file(volume_id) if not service_config: return Response(general_message(400, "file_content is null", u"配置文件内容不存在"), status=400) if new_volume_path == volume.volume_path and new_file_content == service_config.file_content: return Response(general_message(400, "no change", u"没有变化,不需要修改"), status=400) try: data = { "volume_name": volume.volume_name, "volume_path": new_volume_path, "volume_type": volume.volume_type, "file_content": new_file_content } res, body = region_api.upgrade_service_volumes( self.service.service_region, self.tenant.tenant_name, self.service.service_alias, data) if res.status == 200: volume.volume_path = new_volume_path volume.save() service_config.file_content = new_file_content service_config.save() result = general_message(200, "success", u"修改成功") return Response(result, status=result["code"]) return Response(general_message(405, "success", u"修改失败"), status=405) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500)
def batch_mnt_serivce_volume(self, tenant, service, dep_vol_data, user_name=''): local_path = [] tenant_service_volumes = volume_service.get_service_volumes(tenant=tenant, service=service) local_path = [l_path["volume_path"] for l_path in tenant_service_volumes] for dep_vol in dep_vol_data: volume_service.check_volume_path(service, dep_vol["path"], local_path=local_path) for dep_vol in dep_vol_data: dep_vol_id = dep_vol['id'] source_path = dep_vol['path'].strip() dep_volume = volume_repo.get_service_volume_by_pk(dep_vol_id) try: self.add_service_mnt_relation(tenant, service, source_path, dep_volume, user_name) except Exception as e: logger.exception(e)
def get(self, request, *args, **kwargs): """ 获取组件的持久化路径 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path """ is_config = parse_argument(request, 'is_config', value_type=bool, default=False) volumes = volume_service.get_service_volumes(self.tenant, self.service, is_config) volumes_list = [] if is_config: for tenant_service_volume in volumes: volume = volume_repo.get_service_volume_by_pk( tenant_service_volume["ID"]) cf_file = volume_repo.get_service_config_file(volume) if cf_file: tenant_service_volume[ "file_content"] = cf_file.file_content volumes_list.append(tenant_service_volume) else: dependents = mnt_service.get_volume_dependent( self.tenant, self.service) name2deps = {} if dependents: for dep in dependents: if name2deps.get(dep["volume_name"], None) is None: name2deps[dep["volume_name"]] = [] name2deps[dep["volume_name"]].append(dep) for vo in volumes: vo["dep_services"] = name2deps.get(vo["volume_name"], None) volumes_list.append(vo) result = general_message(200, "success", "查询成功", list=volumes_list) return Response(result, status=result["code"])
def delete_service_volume_by_id(self, tenant, service, volume_id): volume = volume_repo.get_service_volume_by_pk(volume_id) if not volume: return 404, u"需要删除的路径不存在", None if volume.volume_type == volume.SHARE: # 判断当前共享目录是否被使用 mnt = mnt_repo.get_mnt_by_dep_id_and_mntname(service.service_id, volume.volume_name) if mnt: return 403, u"当前持久化路径被共享,无法删除", None if service.create_status == "complete": res, body = region_api.delete_service_volumes( service.service_region, tenant.tenant_name, service.service_alias, volume.volume_name, tenant.enterprise_id ) logger.debug( "service {0} delete volume {1}, result {2}".format(service.service_cname, volume.volume_name, body)) volume_repo.delete_volume_by_id(volume_id) return 200, u"success", volume
def batch_mnt_serivce_volume(self, tenant, service, dep_vol_data): for dep_vol in dep_vol_data: code, msg = volume_service.check_volume_path( service, dep_vol["path"]) if code != 200: return code, msg for dep_vol in dep_vol_data: dep_vol_id = dep_vol['id'] source_path = dep_vol['path'] dep_volume = volume_repo.get_service_volume_by_pk(dep_vol_id) try: code, msg = self.add_service_mnt_relation( tenant, service, source_path, dep_volume) except Exception as e: logger.exception(e) code, msg = 500, "添加异常" if code != 200: return code, msg return 200, "success"
def batch_mnt_serivce_volume(self, tenant, service, dep_vol_data): local_path = [] tenant_service_volumes = volume_service.get_service_volumes(tenant=tenant, service=service) local_path = [l_path.volume_path for l_path in tenant_service_volumes] for dep_vol in dep_vol_data: code, msg = volume_service.check_volume_path(service, dep_vol["path"], local_path=local_path) if code != 200: return code, msg for dep_vol in dep_vol_data: dep_vol_id = dep_vol['id'] source_path = dep_vol['path'].strip() dep_volume = volume_repo.get_service_volume_by_pk(dep_vol_id) try: code, msg = self.add_service_mnt_relation(tenant, service, source_path, dep_volume) except Exception as e: logger.exception(e) code, msg = 500, "添加异常" if code != 200: return code, msg return 200, "success"