Add PTR record support for Route53 plugin (#1606)

This fix adds PTR record support for Route53 plugin

This fix fixes 1595

Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This commit is contained in:
Yong Tang
2018-03-13 15:10:07 -07:00
committed by GitHub
parent e5beb9dbfc
commit 55824516bd
2 changed files with 26 additions and 0 deletions

View File

@@ -50,6 +50,8 @@ func (rr Route53) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
answers = a(qname, output.ResourceRecordSets) answers = a(qname, output.ResourceRecordSets)
case dns.TypeAAAA: case dns.TypeAAAA:
answers = aaaa(qname, output.ResourceRecordSets) answers = aaaa(qname, output.ResourceRecordSets)
case dns.TypePTR:
answers = ptr(qname, output.ResourceRecordSets)
} }
if len(answers) == 0 { if len(answers) == 0 {
@@ -93,5 +95,18 @@ func aaaa(zone string, rrss []*route53.ResourceRecordSet) []dns.RR {
return answers return answers
} }
func ptr(zone string, rrss []*route53.ResourceRecordSet) []dns.RR {
answers := []dns.RR{}
for _, rrs := range rrss {
for _, rr := range rrs.ResourceRecords {
r := new(dns.PTR)
r.Hdr = dns.RR_Header{Name: zone, Rrtype: dns.TypePTR, Class: dns.ClassINET, Ttl: uint32(aws.Int64Value(rrs.TTL))}
r.Ptr = aws.StringValue(rr.Value)
answers = append(answers, r)
}
}
return answers
}
// Name implements the Handler interface. // Name implements the Handler interface.
func (rr Route53) Name() string { return "route53" } func (rr Route53) Name() string { return "route53" }

View File

@@ -24,6 +24,8 @@ func (mockedRoute53) ListResourceRecordSets(input *route53.ListResourceRecordSet
value = "10.2.3.4" value = "10.2.3.4"
case "AAAA": case "AAAA":
value = "2001:db8:85a3::8a2e:370:7334" value = "2001:db8:85a3::8a2e:370:7334"
case "PTR":
value = "ptr.example.org"
} }
return &route53.ListResourceRecordSetsOutput{ return &route53.ListResourceRecordSetsOutput{
ResourceRecordSets: []*route53.ResourceRecordSet{ ResourceRecordSets: []*route53.ResourceRecordSet{
@@ -66,6 +68,13 @@ func TestRoute53(t *testing.T) {
expectedReply: []string{"2001:db8:85a3::8a2e:370:7334"}, expectedReply: []string{"2001:db8:85a3::8a2e:370:7334"},
expectedErr: nil, expectedErr: nil,
}, },
{
qname: "example.org",
qtype: dns.TypePTR,
expectedCode: dns.RcodeSuccess,
expectedReply: []string{"ptr.example.org"},
expectedErr: nil,
},
} }
ctx := context.TODO() ctx := context.TODO()
@@ -91,6 +100,8 @@ func TestRoute53(t *testing.T) {
actual = rec.Msg.Answer[i].(*dns.A).A.String() actual = rec.Msg.Answer[i].(*dns.A).A.String()
case dns.TypeAAAA: case dns.TypeAAAA:
actual = rec.Msg.Answer[i].(*dns.AAAA).AAAA.String() actual = rec.Msg.Answer[i].(*dns.AAAA).AAAA.String()
case dns.TypePTR:
actual = rec.Msg.Answer[i].(*dns.PTR).Ptr
} }
if actual != expected { if actual != expected {
t.Errorf("Test %d: Expected answer %s, but got %s", i, expected, actual) t.Errorf("Test %d: Expected answer %s, but got %s", i, expected, actual)