mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-12-24 11:51:13 +08:00
75 lines
1.7 KiB
Go
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
|
|
}
|