/
write_kubeconfig.go
99 lines (77 loc) · 2.39 KB
/
write_kubeconfig.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
99
package utils
import (
"fmt"
"os"
"github.com/kris-nova/logger"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha4"
"github.com/weaveworks/eksctl/pkg/ctl/cmdutils"
"github.com/weaveworks/eksctl/pkg/eks"
"github.com/weaveworks/eksctl/pkg/utils/kubeconfig"
)
var (
writeKubeconfigOutputPath string
writeKubeconfigSetContext bool
writeKubeconfigAutoPath bool
)
func writeKubeconfigCmd(g *cmdutils.Grouping) *cobra.Command {
p := &api.ProviderConfig{}
cfg := api.NewClusterConfig()
cmd := &cobra.Command{
Use: "write-kubeconfig",
Short: "Write kubeconfig file for a given cluster",
Run: func(_ *cobra.Command, args []string) {
if err := doWriteKubeconfigCmd(p, cfg, cmdutils.GetNameArg(args)); err != nil {
logger.Critical("%s\n", err.Error())
os.Exit(1)
}
},
}
group := g.New(cmd)
group.InFlagSet("General", func(fs *pflag.FlagSet) {
fs.StringVarP(&cfg.Metadata.Name, "name", "n", "", "EKS cluster name (required)")
cmdutils.AddRegionFlag(fs, p)
})
group.InFlagSet("Output kubeconfig", func(fs *pflag.FlagSet) {
cmdutils.AddCommonFlagsForKubeconfig(fs, &writeKubeconfigOutputPath, &writeKubeconfigSetContext, &writeKubeconfigAutoPath, "<name>")
})
cmdutils.AddCommonFlagsForAWS(group, p, false)
group.AddTo(cmd)
return cmd
}
func doWriteKubeconfigCmd(p *api.ProviderConfig, cfg *api.ClusterConfig, nameArg string) error {
ctl := eks.New(p, cfg)
if err := ctl.CheckAuth(); err != nil {
return err
}
if cfg.Metadata.Name != "" && nameArg != "" {
return cmdutils.ErrNameFlagAndArg(cfg.Metadata.Name, nameArg)
}
if nameArg != "" {
cfg.Metadata.Name = nameArg
}
if cfg.Metadata.Name == "" {
return fmt.Errorf("--name must be set")
}
if writeKubeconfigAutoPath {
if writeKubeconfigOutputPath != kubeconfig.DefaultPath {
return fmt.Errorf("--kubeconfig and --auto-kubeconfig %s", cmdutils.IncompatibleFlags)
}
writeKubeconfigOutputPath = kubeconfig.AutoPath(cfg.Metadata.Name)
}
if err := ctl.GetCredentials(cfg); err != nil {
return err
}
config, err := ctl.NewClientConfig(cfg, false)
if err != nil {
return err
}
filename, err := kubeconfig.Write(writeKubeconfigOutputPath, *config.Client, writeKubeconfigSetContext)
if err != nil {
return errors.Wrap(err, "writing kubeconfig")
}
logger.Success("saved kubeconfig as %q", filename)
return nil
}