-
Notifications
You must be signed in to change notification settings - Fork 1
/
aws_eks.go
85 lines (67 loc) · 1.92 KB
/
aws_eks.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
package main
import (
"encoding/json"
"path/filepath"
"github.com/mitchellh/go-homedir"
logger "github.com/rs/zerolog/log"
)
var kubeConfig string
// EKSClusters defines the structure returned by AWS Cli
type EKSClusters struct {
Items []string `json:"clusters"`
}
// EKS implements the flow to retrieve the EKS clusters configuration to use them with kubectl
type EKS struct {
Cmd EKSCommand
KubeConfigPath string
BackupFile bool
}
// NewEKS returns a new EKS
func NewEKS(cmd EKSCommand, c *ConfigOptions) *EKS {
return &EKS{
Cmd: cmd,
KubeConfigPath: kubeConfig,
BackupFile: c.BackupFile,
}
}
// UpdateKubeConfig constructs a configuration with prepopulated server and certificate
// authority data values for each credential retrieved.
func (e *EKS) UpdateKubeConfig(creds []*Credential) error {
if e.BackupFile {
kubeConfigFile := NewFile(e.KubeConfigPath)
filename, err := kubeConfigFile.Backup()
if err != nil {
return err
}
logger.Info().Str("path", filename).Msg("backup completed successfully")
}
for _, cred := range creds {
out, err := e.Cmd.ListClusters(cred.Region, cred.ProfileName)
if err != nil {
return err
}
logger.Debug().Str("profile", cred.ProfileName).Str("region", cred.Region).Msg("listing eks clusters...")
clusters := &EKSClusters{}
err = json.Unmarshal([]byte(out), clusters)
if err != nil {
return err
}
logger.Debug().Msgf("%d clusters were found", len(clusters.Items))
for _, c := range clusters.Items {
out, err := e.Cmd.UpdateKubeConfig(cred.Region, cred.ProfileName, c)
if err != nil {
return err
}
logger.Info().Str("cluster", c).Str("profile", cred.ProfileName).Msg("kubeconfig successfully updated")
logger.Trace().Str("cluster", c).Msg(out)
}
}
return nil
}
func init() {
home, err := homedir.Dir()
if err != nil {
logger.Fatal().Err(err)
}
kubeConfig = filepath.Join(home, ".kube", "config")
}