package services import ( "fmt" "os" "regexp" "lokideploy/models" ) // resolveKubeconfig 取集群最终的 kubeconfig 文本(优先内存字段,其次磁盘文件) func resolveKubeconfig(cluster *models.Cluster) (string, error) { if cluster.KubeConfig != "" { return cluster.KubeConfig, nil } if cluster.KubeConfigPath != "" { data, err := os.ReadFile(cluster.KubeConfigPath) if err != nil { return "", fmt.Errorf("读取 kubeconfig 文件失败: %v", err) } return string(data), nil } return "", fmt.Errorf("集群未配置 kubeconfig") } // BuildKubeconfigFromToken 用 API Server + Token 构造最小 kubeconfig // 采用 insecure-skip-tls-verify,便于内网/自签证书集群接入 func BuildKubeconfigFromToken(apiServer, token string) string { return fmt.Sprintf(`apiVersion: v1 kind: Config clusters: - cluster: insecure-skip-tls-verify: true server: %s name: loki-cluster contexts: - context: cluster: loki-cluster user: loki-user name: loki-context current-context: loki-context users: - name: loki-user user: token: %s `, apiServer, token) } var apiServerRe = regexp.MustCompile(`(?m)^\s*server:\s*(\S+)`) // ExtractAPIServer 从 kubeconfig 文本提取 server 地址(展示用) func ExtractAPIServer(kubeconfig string) string { m := apiServerRe.FindStringSubmatch(kubeconfig) if len(m) >= 2 { return m[1] } return "" }