/
route53_cidr_collection.go
111 lines (92 loc) · 2.82 KB
/
route53_cidr_collection.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
package resources
import (
"context"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/route53"
"github.com/gruntwork-io/cloud-nuke/config"
"github.com/gruntwork-io/cloud-nuke/logging"
"github.com/gruntwork-io/cloud-nuke/report"
)
func (r *Route53CidrCollection) getAll(c context.Context, configObj config.Config) ([]*string, error) {
var ids []*string
result, err := r.Client.ListCidrCollections(&route53.ListCidrCollectionsInput{})
if err != nil {
logging.Errorf("[Failed] unable to list cidr collection: %s", err)
return nil, err
}
for _, r := range result.CidrCollections {
if configObj.Route53CIDRCollection.ShouldInclude(config.ResourceValue{
Name: r.Name,
}) {
ids = append(ids, r.Id)
}
}
return ids, nil
}
func (r *Route53CidrCollection) nukeCidrLocations(id *string) (err error) {
// get attached cidr blocks
loc, err := r.Client.ListCidrBlocks(&route53.ListCidrBlocksInput{
CollectionId: id,
})
if err != nil {
logging.Errorf("[Failed] unable to list cidr blocks: %v", err)
return err
}
var changes []*route53.CidrCollectionChange
for _, block := range loc.CidrBlocks {
changes = append(changes, &route53.CidrCollectionChange{
CidrList: []*string{block.CidrBlock},
Action: aws.String("DELETE_IF_EXISTS"),
LocationName: block.LocationName,
})
}
_, err = r.Client.ChangeCidrCollection(&route53.ChangeCidrCollectionInput{
Id: id,
Changes: changes,
})
if err != nil {
logging.Errorf("[Failed] unable to list cidr collections: %v", err)
return err
}
logging.Debugf("[Route53 CIDR location] Successfully nuked cidr location(s)")
return nil
}
func (r *Route53CidrCollection) nukeAll(identifiers []*string) (err error) {
if len(identifiers) == 0 {
logging.Debugf("No Route53 Cidr collection to nuke in region %s", r.Region)
return nil
}
logging.Debugf("Deleting all Route53 Cidr collection in region %s", r.Region)
var deletedIds []*string
for _, id := range identifiers {
err := func() error {
// remove the cidr blocks
if err := r.nukeCidrLocations(id); err != nil {
return err
}
// delete the cidr collection
if _, err = r.Client.DeleteCidrCollection(&route53.DeleteCidrCollectionInput{
Id: id,
}); err != nil {
logging.Errorf("[Failed] unable to nuke the cidr collection: %v ", err)
return err
}
return nil
}()
// Record status of this resource
e := report.Entry{
Identifier: aws.StringValue(id),
ResourceType: "Route53 cidr collection",
Error: err,
}
report.Record(e)
if err != nil {
logging.Errorf("[Failed] %s: %s", *id, err)
} else {
deletedIds = append(deletedIds, id)
logging.Debugf("Deleted Route53 cidr collection: %s", aws.StringValue(id))
}
}
logging.Debugf("[OK] %d Route53 cidr collection(s) deleted in %s", len(deletedIds), r.Region)
return nil
}