-
Notifications
You must be signed in to change notification settings - Fork 787
/
get_eks.go
137 lines (124 loc) · 2.98 KB
/
get_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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package cmd
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
"github.com/jenkins-x/jx/pkg/cloud/amazon"
"github.com/pkg/errors"
"gopkg.in/yaml.v2"
"io"
"os"
"os/exec"
"github.com/jenkins-x/jx/pkg/jx/cmd/templates"
"github.com/jenkins-x/jx/pkg/log"
"github.com/spf13/cobra"
"gopkg.in/AlecAivazis/survey.v1/terminal"
)
type GetEksOptions struct {
GetOptions
Profile string
Region string
}
var (
getEksLong = templates.LongDesc(`
Display one or many EKS cluster resources
`)
getEksExample = templates.Examples(`
# List EKS clusters available in AWS
jx get eks
# Displays someCluster EKS resource
jx get eks someCluster
# Displays someCluster resource in YAML format
jx get eks someCluster -oyaml
`)
)
func NewCmdGetEks(f Factory, in terminal.FileReader, out terminal.FileWriter, errOut io.Writer) *cobra.Command {
options := &GetEksOptions{
GetOptions: GetOptions{
CommonOptions: CommonOptions{
Factory: f,
In: in,
Out: out,
Err: errOut,
},
},
}
cmd := &cobra.Command{
Use: "eks",
Short: "List EKS clusters.",
Long: getEksLong,
Example: getEksExample,
Run: func(cmd *cobra.Command, args []string) {
options.Cmd = cmd
options.Args = args
err := options.Run()
CheckErr(err)
},
}
cmd.Flags().StringVarP(&options.Profile, "profile", "", "", "AWS profile to use.")
cmd.Flags().StringVarP(&options.Region, "region", "", "", "AWS region to use. Default: "+amazon.DefaultRegion)
options.addGetFlags(cmd)
return cmd
}
func (o *GetEksOptions) Run() error {
if len(o.Args) == 0 {
var deps []string
d := binaryShouldBeInstalled("eksctl")
if d != "" {
deps = append(deps, d)
}
d = binaryShouldBeInstalled("heptio-authenticator-aws")
if d != "" {
deps = append(deps, d)
}
err := o.installMissingDependencies(deps)
if err != nil {
log.Errorf("%v\nPlease fix the error or install manually then try again", err)
os.Exit(-1)
}
region, err := amazon.ResolveRegion(o.Profile, o.Region)
if err != nil {
return err
}
cmd := exec.Command("eksctl", "get", "cluster", "--region", region)
output, err := cmd.CombinedOutput()
if err != nil {
return nil
}
fmt.Print(string(output))
return nil
} else {
cluster := o.Args[0]
session, err := amazon.NewAwsSession(o.Profile, o.Region)
if err != nil {
return err
}
svc := ec2.New(session)
instances, err := svc.DescribeInstances(&ec2.DescribeInstancesInput{
Filters: []*ec2.Filter{
{
Name: aws.String("tag:eksctl.cluster.k8s.io/v1alpha1/cluster-name"),
Values: []*string{
aws.String(cluster),
},
},
},
})
if err != nil {
return err
}
if o.Output == "" {
fmt.Println("NAME")
fmt.Println(cluster)
} else if o.Output == "yaml" {
reservations, err := yaml.Marshal(instances.Reservations)
if err != nil {
return err
}
fmt.Println(string(reservations))
} else {
return errors.New("Invalid output format.")
}
return nil
}
}