-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathk8sremote.go
74 lines (61 loc) · 1.74 KB
/
k8sremote.go
1
2
3
4
5
6
7
8
9
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package config
import (
"context"
"fmt"
"strings"
"github.com/dgmorales/go-cli-selfupdate/kube"
"github.com/mitchellh/mapstructure"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
const defSSCfgNs = "myk8sapi-system"
const defSSCfgMap = "cli-config"
// KubeServerSideConfigLoader loads ServerSideConfig from a Config Map in a K8S Cluster
type KubeServerSideConfigLoader struct {
client *kubernetes.Clientset
ns string
cmName string
}
// NewKubeSSCfgLoader returns a KubeServerSideConfigLoader.
//
// If kc argument is nil, a new kubernetes.Clientset will be generated.
//
// If any of ns and cmName are empty (""), defaults are used for them.
func NewKubeSSCfgLoader(kc *kubernetes.Clientset, ns string, cmName string) (KubeServerSideConfigLoader, error) {
if strings.TrimSpace(ns) == "" {
ns = defSSCfgNs
}
if strings.TrimSpace(cmName) == "" {
cmName = defSSCfgMap
}
if kc == nil {
newKc, err := kube.NewClient()
if err != nil {
return KubeServerSideConfigLoader{}, err
}
return KubeServerSideConfigLoader{
client: newKc,
ns: ns,
cmName: cmName,
}, nil
}
return KubeServerSideConfigLoader{
client: kc,
ns: ns,
cmName: cmName,
}, nil
}
// Load loads server side configuration from a Kubernetes ConfigMap
func (k KubeServerSideConfigLoader) Load() (ServerSideConfig, error) {
cfg := ServerSideConfig{}
cm, err := k.client.CoreV1().ConfigMaps(k.ns).Get(context.Background(), k.cmName,
metav1.GetOptions{})
if err != nil {
return cfg, fmt.Errorf("error reading configmap %s/%s: %w", k.ns, k.cmName, err)
}
err = mapstructure.Decode(cm.Data, &cfg)
if err != nil {
return cfg, fmt.Errorf("error parsing configmap %s/%s: %w", k.ns, k.cmName, err)
}
return cfg, nil
}