forked from ekristen/aws-nuke
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patheks-nodegroups.go
129 lines (103 loc) · 2.96 KB
/
eks-nodegroups.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
package resources
import (
"context"
"fmt"
"time"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/eks"
"github.com/ekristen/libnuke/pkg/registry"
"github.com/ekristen/libnuke/pkg/resource"
"github.com/ekristen/libnuke/pkg/types"
"github.com/ekristen/aws-nuke/v3/pkg/nuke"
)
const EKSNodegroupResource = "EKSNodegroup"
func init() {
registry.Register(®istry.Registration{
Name: EKSNodegroupResource,
Scope: nuke.Account,
Lister: &EKSNodegroupLister{},
DeprecatedAliases: []string{
"EKSNodegroups",
},
})
}
type EKSNodegroupLister struct{}
func (l *EKSNodegroupLister) List(_ context.Context, o interface{}) ([]resource.Resource, error) {
opts := o.(*nuke.ListerOpts)
svc := eks.New(opts.Session)
var clusterNames []*string
var resources []resource.Resource
clusterInputParams := &eks.ListClustersInput{
MaxResults: aws.Int64(100),
}
// fetch all cluster names
for {
resp, err := svc.ListClusters(clusterInputParams)
if err != nil {
return nil, err
}
clusterNames = append(clusterNames, resp.Clusters...)
if resp.NextToken == nil {
break
}
clusterInputParams.NextToken = resp.NextToken
}
nodegroupsInputParams := &eks.ListNodegroupsInput{
MaxResults: aws.Int64(100),
}
describeNodegroupInputParams := &eks.DescribeNodegroupInput{}
// fetch the associated node groups
for _, clusterName := range clusterNames {
nodegroupsInputParams.ClusterName = clusterName
describeNodegroupInputParams.ClusterName = clusterName
for {
resp, err := svc.ListNodegroups(nodegroupsInputParams)
if err != nil {
return nil, err
}
for _, nodegroupName := range resp.Nodegroups {
describeNodegroupInputParams.NodegroupName = nodegroupName
nodegroupDescriptionResponse, err := svc.DescribeNodegroup(describeNodegroupInputParams)
if err != nil {
return nil, err
}
resources = append(resources, &EKSNodegroup{
svc: svc,
nodegroup: nodegroupDescriptionResponse.Nodegroup,
})
}
if resp.NextToken == nil {
nodegroupsInputParams.NextToken = nil
break
}
nodegroupsInputParams.NextToken = resp.NextToken
}
}
return resources, nil
}
type EKSNodegroup struct {
svc *eks.EKS
nodegroup *eks.Nodegroup
}
func (ng *EKSNodegroup) Remove(_ context.Context) error {
_, err := ng.svc.DeleteNodegroup(&eks.DeleteNodegroupInput{
ClusterName: ng.nodegroup.ClusterName,
NodegroupName: ng.nodegroup.NodegroupName,
})
return err
}
func (ng *EKSNodegroup) Properties() types.Properties {
properties := types.NewProperties()
properties.Set("Cluster", ng.nodegroup.ClusterName)
properties.Set("Profile", ng.nodegroup.NodegroupName)
if ng.nodegroup.CreatedAt != nil {
properties.Set("CreatedAt", ng.nodegroup.CreatedAt.Format(time.RFC3339))
}
for k, v := range ng.nodegroup.Tags {
properties.SetTag(&k, v)
}
return properties
}
func (ng *EKSNodegroup) String() string {
return fmt.Sprintf("%s:%s", *ng.nodegroup.ClusterName, *ng.nodegroup.NodegroupName)
}