コード例 #1
0
 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)
コード例 #2
0
    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
コード例 #3
0
    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"
コード例 #4
0
 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)
コード例 #5
0
 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)
コード例 #6
0
    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"])
コード例 #7
0
    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
コード例 #8
0
ファイル: mnt_service.py プロジェクト: sunshine2995/console
 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"
コード例 #9
0
 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"