cluster.go 1.92 KB
Newer Older
qiuqunfeng's avatar
qiuqunfeng committed
1 2 3 4 5 6
package utils

import (
	"sync"

	"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
7 8 9

	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
qiuqunfeng's avatar
qiuqunfeng committed
10 11
)

12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
type KubeClient struct {
	*kubernetes.Clientset
	Versioned *versioned.Clientset
}

func NewKubeClient(apiServer string, caData []byte, clientCertData []byte, clientKeyData []byte, insecure bool) *KubeClient {
	versionedClient := versioned.NewForConfigOrDie(&rest.Config{
		Host: apiServer,
		TLSClientConfig: rest.TLSClientConfig{
			Insecure: insecure,
			CAData:   caData,
			CertData: clientCertData,
			KeyData:  clientKeyData,
		},
	})
	clientset := kubernetes.NewForConfigOrDie(&rest.Config{
		Host: apiServer,
		TLSClientConfig: rest.TLSClientConfig{
			Insecure: insecure,
			CAData:   caData,
			CertData: clientCertData,
			KeyData:  clientKeyData,
		},
	})

	return &KubeClient{
		Clientset: clientset,
		Versioned: versionedClient,
	}
}

qiuqunfeng's avatar
qiuqunfeng committed
43
type ClusterClientManager struct {
44
	clients map[string]*KubeClient
qiuqunfeng's avatar
qiuqunfeng committed
45 46 47 48
}

func NewClusterClientManager() *ClusterClientManager {
	return &ClusterClientManager{
49
		clients: make(map[string]*KubeClient),
qiuqunfeng's avatar
qiuqunfeng committed
50 51 52
	}
}

53
func (c *ClusterClientManager) GetClient(regionCode string) *KubeClient {
qiuqunfeng's avatar
qiuqunfeng committed
54 55 56
	return c.clients[regionCode]
}

57
func (c *ClusterClientManager) AddClient(regionCode string, client *KubeClient) {
qiuqunfeng's avatar
qiuqunfeng committed
58 59 60 61 62 63 64
	c.clients[regionCode] = client
}

func (c *ClusterClientManager) RemoveClient(regionCode string) {
	delete(c.clients, regionCode)
}

65
func (c *ClusterClientManager) GetAllClients() map[string]*KubeClient {
qiuqunfeng's avatar
qiuqunfeng committed
66 67 68
	return c.clients
}

69
func (c *ClusterClientManager) GetClientByRegionCode(regionCode string) *KubeClient {
qiuqunfeng's avatar
qiuqunfeng committed
70 71 72
	return c.clients[regionCode]
}

73
func (c *ClusterClientManager) ForEach(fn func(regionCode string, client *KubeClient)) {
qiuqunfeng's avatar
qiuqunfeng committed
74 75 76
	wg := sync.WaitGroup{}
	for regionCode, client := range c.clients {
		wg.Add(1)
77
		go func(regionCode string, client *KubeClient) {
qiuqunfeng's avatar
qiuqunfeng committed
78 79 80 81 82 83
			defer wg.Done()
			fn(regionCode, client)
		}(regionCode, client)
	}
	wg.Wait()
}