Bugfix: bx in etcd.go didn't get Key

Thus record only diffing in the Key were seen as identical and not
included in the end results. Of course this being a map when and if
this would happen was rather random.

Fixed by including Key. Further small tweaks and code refactors.
This commit is contained in:
Miek Gieben
2016-03-25 15:30:44 +00:00
parent e408c81a8c
commit e62eb2cde0
4 changed files with 38 additions and 34 deletions

View File

@@ -10,13 +10,20 @@ import (
"github.com/miekg/dns"
)
func (e Etcd) A(zone string, state middleware.State, previousRecords []dns.RR) (records []dns.RR, err error) {
services, err := e.Records(state.Name(), false)
func (e Etcd) records(state middleware.State, exact bool) ([]msg.Service, error) {
services, err := e.Records(state.Name(), exact)
if err != nil {
return nil, err
}
services = msg.Group(services)
return services, nil
}
func (e Etcd) A(zone string, state middleware.State, previousRecords []dns.RR) (records []dns.RR, err error) {
services, err := e.records(state, false)
if err != nil {
return nil, err
}
for _, serv := range services {
ip := net.ParseIP(serv.Host)
@@ -73,13 +80,11 @@ func (e Etcd) A(zone string, state middleware.State, previousRecords []dns.RR) (
}
func (e Etcd) AAAA(zone string, state middleware.State, previousRecords []dns.RR) (records []dns.RR, err error) {
services, err := e.Records(state.Name(), false)
services, err := e.records(state, false)
if err != nil {
return nil, err
}
services = msg.Group(services)
for _, serv := range services {
ip := net.ParseIP(serv.Host)
switch {
@@ -139,13 +144,11 @@ func (e Etcd) AAAA(zone string, state middleware.State, previousRecords []dns.RR
// SRV returns SRV records from etcd.
// If the Target is not a name but an IP address, a name is created on the fly.
func (e Etcd) SRV(zone string, state middleware.State) (records []dns.RR, extra []dns.RR, err error) {
services, err := e.Records(state.Name(), false)
services, err := e.records(state, false)
if err != nil {
return nil, nil, err
}
services = msg.Group(services)
// Looping twice to get the right weight vs priority
w := make(map[int]int)
for _, serv := range services {
@@ -224,7 +227,7 @@ func (e Etcd) SRV(zone string, state middleware.State) (records []dns.RR, extra
// MX returns MX records from etcd.
// If the Target is not a name but an IP address, a name is created on the fly.
func (e Etcd) MX(zone string, state middleware.State) (records []dns.RR, extra []dns.RR, err error) {
services, err := e.Records(state.Name(), false)
services, err := e.records(state, false)
if err != nil {
return nil, nil, err
}
@@ -282,13 +285,11 @@ func (e Etcd) MX(zone string, state middleware.State) (records []dns.RR, extra [
}
func (e Etcd) CNAME(zone string, state middleware.State) (records []dns.RR, err error) {
services, err := e.Records(state.Name(), true)
services, err := e.records(state, true)
if err != nil {
return nil, err
}
services = msg.Group(services)
if len(services) > 0 {
serv := services[0]
if ip := net.ParseIP(serv.Host); ip == nil {
@@ -299,13 +300,11 @@ func (e Etcd) CNAME(zone string, state middleware.State) (records []dns.RR, err
}
func (e Etcd) TXT(zone string, state middleware.State) (records []dns.RR, err error) {
services, err := e.Records(state.Name(), false)
services, err := e.records(state, false)
if err != nil {
return nil, err
}
services = msg.Group(services)
for _, serv := range services {
if serv.Text == "" {
continue