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
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)
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)
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
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
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)
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)
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)