/
route53-resource-records.go
109 lines (88 loc) · 2.27 KB
/
route53-resource-records.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
package resources
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/route53"
"github.com/rebuy-de/aws-nuke/pkg/types"
)
type Route53ResourceRecordSet struct {
svc *route53.Route53
hostedZoneId *string
data *route53.ResourceRecordSet
changeId *string
}
func init() {
register("Route53ResourceRecordSet", ListRoute53ResourceRecordSets)
}
func ListRoute53ResourceRecordSets(sess *session.Session) ([]Resource, error) {
svc := route53.New(sess)
resources := make([]Resource, 0)
sub, err := ListRoute53HostedZones(sess)
if err != nil {
return nil, err
}
for _, resource := range sub {
zone := resource.(*Route53HostedZone)
rrs, err := ListResourceRecordsForZone(svc, zone.id)
if err != nil {
return nil, err
}
resources = append(resources, rrs...)
}
return resources, nil
}
func ListResourceRecordsForZone(svc *route53.Route53, zoneId *string) ([]Resource, error) {
params := &route53.ListResourceRecordSetsInput{
HostedZoneId: zoneId,
}
resp, err := svc.ListResourceRecordSets(params)
if err != nil {
return nil, err
}
resources := make([]Resource, 0)
for _, rrs := range resp.ResourceRecordSets {
resources = append(resources, &Route53ResourceRecordSet{
svc: svc,
hostedZoneId: zoneId,
data: rrs,
})
}
return resources, nil
}
func (r *Route53ResourceRecordSet) Filter() error {
if *r.data.Type == "NS" {
return fmt.Errorf("cannot delete NS record")
}
if *r.data.Type == "SOA" {
return fmt.Errorf("cannot delete SOA record")
}
return nil
}
func (r *Route53ResourceRecordSet) Remove() error {
params := &route53.ChangeResourceRecordSetsInput{
HostedZoneId: r.hostedZoneId,
ChangeBatch: &route53.ChangeBatch{
Changes: []*route53.Change{
&route53.Change{
Action: aws.String("DELETE"),
ResourceRecordSet: r.data,
},
},
},
}
resp, err := r.svc.ChangeResourceRecordSets(params)
if err != nil {
return err
}
r.changeId = resp.ChangeInfo.Id
return nil
}
func (r *Route53ResourceRecordSet) Properties() types.Properties {
return types.NewProperties().
Set("Name", r.data.Name).
Set("Type", r.data.Type)
}
func (r *Route53ResourceRecordSet) String() string {
return *r.data.Name
}