Esempio n. 1
0
 def _get_tag_list(self, request):
     deploy_tag_list = request.GET.get('deploy_tag_list')
     try:
         tag_list = json.loads(deploy_tag_list)
     except Exception:
         raise error_codes.ValidateError(_("请选择关联的应用"))
     return tag_list
Esempio n. 2
0
    def info(self, request, project_id, cluster_id):
        node_ip_map = self.get_node_ip_map(request, project_id, cluster_id)
        data = self.get_validated_data(request)

        if data["res_id"] not in node_ip_map:
            raise error_codes.ValidateError(_("IP地址不合法或不属于当前集群"))

        metric = {"provider": "Prometheus", "id": node_ip_map[data["res_id"]]}

        uname_metric = [
            "dockerVersion",
            "osVersion",  # from cadvisor
            "domainname",
            "machine",
            "nodename",
            "release",
            "sysname",
            "version",  # from node-exporter
        ]

        usage_metric = ["cpu_count", "memory", "disk"]

        for info in prometheus.get_node_info(
                cluster_id, data["res_id"]).get("result") or []:
            for k, v in info["metric"].items():
                if k in uname_metric:
                    metric[k] = v
                elif k == "metric_name" and v in usage_metric:
                    metric[v] = info["value"][1] if info["value"] else "0"

        return response.Response(metric)
Esempio n. 3
0
    def list_container_ports(self, request, project_id, version_id):
        """查看模板集指定版本的端口信息"""
        ventity = self.get_versioned_entity(project_id, version_id)

        app_ids = request.GET.get('app_ids')
        if not app_ids:
            raise error_codes.ValidateError(_("请选择关联的应用"))

        app_id_list = app_ids.split(',')
        ports = ventity.get_version_ports(app_id_list)
        return Response(ports)
Esempio n. 4
0
def handle_number_var(var, name, is_preview, is_validate=True):
    if isinstance(var, int) or isinstance(var, float):
        return var

    if is_rate_number(var):
        return var

    if is_preview:
        if REAL_NUM_VAR_PATTERN.match(var):
            return var

    try:
        var = int(var)
    except Exception:
        if is_validate:
            raise error_codes.ValidateError(_("{} 的值[{}]不是一个有效数字").format(name, var))
    return var
Esempio n. 5
0
def handle_number_var(var, name, is_preview, is_validate=True):
    if isinstance(var, int) or isinstance(var, float):
        return var

    if is_rate_number(var):
        return var

    # 预览模式下将变量添加 },标识前端需要将该值转成数字
    if is_preview:
        if REAL_NUM_VAR_PATTERN.match(var):
            return var.replace("}}", "}}}")
    try:
        var = int(var)
    except Exception:
        if is_validate:
            raise error_codes.ValidateError(f"{name} 的值[{var}]不是一个有效数字")
    return var
Esempio n. 6
0
    def update(self, request, project_id_or_code, cluster_id, ns_name):
        if ns_name in BCS_RESERVED_NAMESPACES:
            raise error_codes.ValidateError('不允许更新 BCS 保留的命名空间')
        # 更新操作审计信息
        request.audit_ctx.update_fields(resource_type=ResourceType.Namespace, resource=ns_name)

        params = self.params_validate(UpdateNamespaceSLZ)
        ns_client = Namespace(request.ctx_cluster)
        namespace = ns_client.get(ns_name, is_format=False)
        if not namespace:
            raise error_codes.ResNotFoundError('集群 {} 中不存在命名空间 {}'.format(cluster_id, ns_name))

        manifest = namespace.data.to_dict()
        for key in ['labels', 'annotations']:
            manifest['metadata'][key] = params[key]
        ns_client.replace(name=ns_name, body=manifest)
        return Response(manifest)
Esempio n. 7
0
    def create(self, request, project_id_or_code, cluster_id):
        project_id = request.project.project_id
        params = self.params_validate(CreateNamespaceSLZ, context={'project_id': project_id})
        ns_name, variables = params['name'], params['variables']
        if ns_name in BCS_RESERVED_NAMESPACES:
            raise error_codes.ValidateError('不允许创建 BCS 保留的命名空间')
        # 更新操作审计信息
        request.audit_ctx.update_fields(resource_type=ResourceType.Namespace, resource=ns_name)

        namespace = Namespace(request.ctx_cluster).get_or_create_cc_namespace(
            ns_name, request.user.username, params['labels'], params['annotations']
        )
        # 创建命名空间下的变量值
        ns_id = namespace['namespace_id']
        namespace['id'] = ns_id
        NameSpaceVariable.batch_save(ns_id, variables)
        namespace['variables'] = variables
        return Response(namespace)
Esempio n. 8
0
    def info(self, request, project_id, cluster_id, node_ip):
        """ 节点基础指标信息 """
        node_list = get_cluster_nodes(request.user.token.access_token,
                                      project_id, cluster_id)
        node_ip_map = {i["inner_ip"]: i["id"] for i in node_list}

        if node_ip not in node_ip_map:
            raise error_codes.ValidateError(
                _('IP {} 不合法或不属于当前集群').format(node_ip))

        response_data = {'provider': 'Prometheus', 'id': node_ip_map[node_ip]}
        for info in prom.get_node_info(cluster_id,
                                       node_ip).get('result') or []:
            for k, v in info['metric'].items():
                if k in constants.NODE_UNAME_METRIC:
                    response_data[k] = v
                elif k == 'metric_name' and v in constants.NODE_USAGE_METRIC:
                    response_data[
                        v] = info['value'][1] if info['value'] else '0'

        return Response(response_data)