/
config.go
98 lines (92 loc) · 2.69 KB
/
config.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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package rest
import (
"io"
"k8s.io/apimachinery/pkg/runtime/serializer/json"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
api "k8s.io/client-go/tools/clientcmd/api/v1"
)
func DefaultConfig(overrides clientcmd.ConfigOverrides) (*rest.Config, error) {
return load(clientcmd.NewDefaultClientConfigLoadingRules(), overrides)
}
func Config(kubeconfigPath string, overrides clientcmd.ConfigOverrides) (*rest.Config, error) {
loader := &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}
return load(loader, overrides)
}
func load(loader clientcmd.ClientConfigLoader, overrides clientcmd.ConfigOverrides) (*rest.Config, error) {
kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loader, &overrides)
config, err := kubeConfig.ClientConfig()
if err != nil {
return nil, err
}
config.QPS = 300
config.Burst = 300
return config, nil
}
func Save(cfg *rest.Config, w io.Writer) error {
var authProvider *api.AuthProviderConfig
var execConfig *api.ExecConfig
if cfg.AuthProvider != nil {
authProvider = &api.AuthProviderConfig{
Name: cfg.AuthProvider.Name,
Config: cfg.AuthProvider.Config,
}
}
if cfg.ExecProvider != nil {
execConfig = &api.ExecConfig{
Command: cfg.ExecProvider.Command,
Args: cfg.ExecProvider.Args,
APIVersion: cfg.ExecProvider.APIVersion,
Env: []api.ExecEnvVar{},
}
for _, envVar := range cfg.ExecProvider.Env {
execConfig.Env = append(execConfig.Env, api.ExecEnvVar{
Name: envVar.Name,
Value: envVar.Value,
})
}
}
err := rest.LoadTLSFiles(cfg)
if err != nil {
return err
}
return json.NewYAMLSerializer(json.DefaultMetaFactory, nil, nil).Encode(&api.Config{
CurrentContext: "chainsaw",
Clusters: []api.NamedCluster{
{
Name: "chainsaw",
Cluster: api.Cluster{
Server: cfg.Host,
CertificateAuthorityData: cfg.TLSClientConfig.CAData,
InsecureSkipTLSVerify: cfg.TLSClientConfig.Insecure,
},
},
},
Contexts: []api.NamedContext{
{
Name: "chainsaw",
Context: api.Context{
Cluster: "chainsaw",
AuthInfo: "chainsaw",
},
},
},
AuthInfos: []api.NamedAuthInfo{
{
Name: "chainsaw",
AuthInfo: api.AuthInfo{
ClientCertificateData: cfg.TLSClientConfig.CertData,
ClientKeyData: cfg.TLSClientConfig.KeyData,
Token: cfg.BearerToken,
Username: cfg.Username,
Password: cfg.Password,
Impersonate: cfg.Impersonate.UserName,
ImpersonateGroups: cfg.Impersonate.Groups,
ImpersonateUserExtra: cfg.Impersonate.Extra,
AuthProvider: authProvider,
Exec: execConfig,
},
},
},
}, w)
}