Files
kubevpn/pkg/util/name.go
2025-08-14 19:12:59 +08:00

75 lines
1.7 KiB
Go

package util
import (
"fmt"
"os"
"path/filepath"
"strings"
"time"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/clientcmd/api"
"github.com/wencaiwulue/kubevpn/v2/pkg/config"
)
func Join(names ...string) string {
return strings.Join(names, "_")
}
func ContainerNet(name string) string {
return fmt.Sprintf("container:%s", name)
}
func GenEnvoyUID(ns, uid string) string {
return fmt.Sprintf("%s.%s", ns, uid)
}
func GenKubeconfigTempPath(kubeconfigBytes []byte) string {
var path string
cluster, ns, _ := GetCluster(kubeconfigBytes)
if !ContainsPathSeparator(cluster) && !ContainsPathSeparator(ns) {
pattern := fmt.Sprintf("%s_%s_%d", cluster, ns, time.Now().Unix())
pattern = strings.ReplaceAll(pattern, string(os.PathSeparator), "-")
path = filepath.Join(config.GetTempPath(), pattern)
} else {
path = filepath.Join(config.GetTempPath(), fmt.Sprintf("%d", time.Now().Unix()))
}
return path
}
func ContainsPathSeparator(pattern string) bool {
for i := 0; i < len(pattern); i++ {
if os.IsPathSeparator(pattern[i]) {
return true
}
}
return false
}
func GetCluster(kubeConfigBytes []byte) (cluster string, ns string, err error) {
var clientConfig clientcmd.ClientConfig
clientConfig, err = clientcmd.NewClientConfigFromBytes(kubeConfigBytes)
if err != nil {
return
}
var rawConfig api.Config
rawConfig, err = clientConfig.RawConfig()
if err != nil {
return
}
if err = api.FlattenConfig(&rawConfig); err != nil {
return
}
if rawConfig.Contexts == nil {
return
}
kubeContext := rawConfig.Contexts[rawConfig.CurrentContext]
if kubeContext == nil {
return
}
cluster = kubeContext.Cluster
ns = kubeContext.Namespace
return
}