aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-11 12:12:21 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2017-08-11 12:12:21 +0100
commit6e91408f61bdd78aef8f8e368410793334eb35fc (patch)
tree153cc070363281a302add2194cfb7756f4639f4d /middleware/kubernetes
parentb5d2a82ed742f80016868f492f76e86b74645919 (diff)
downloadcoredns-6e91408f61bdd78aef8f8e368410793334eb35fc.tar.gz
coredns-6e91408f61bdd78aef8f8e368410793334eb35fc.tar.zst
coredns-6e91408f61bdd78aef8f8e368410793334eb35fc.zip
mw/k8s: use request.Request in parseRequest
Diffstat (limited to 'middleware/kubernetes')
-rw-r--r--middleware/kubernetes/federation_test.go13
-rw-r--r--middleware/kubernetes/kubernetes.go2
-rw-r--r--middleware/kubernetes/ns.go1
-rw-r--r--middleware/kubernetes/parse.go21
-rw-r--r--middleware/kubernetes/parse_test.go13
5 files changed, 31 insertions, 19 deletions
diff --git a/middleware/kubernetes/federation_test.go b/middleware/kubernetes/federation_test.go
index be5069c26..410d2a54e 100644
--- a/middleware/kubernetes/federation_test.go
+++ b/middleware/kubernetes/federation_test.go
@@ -6,6 +6,7 @@ import (
"testing"
"github.com/coredns/coredns/middleware/etcd/msg"
+ "github.com/coredns/coredns/request"
"github.com/miekg/dns"
"k8s.io/client-go/1.5/pkg/api"
)
@@ -90,12 +91,18 @@ func TestFederationCNAMERecord(t *testing.T) {
k.APIConn = apiConnFedTest{}
k.interfaceAddrsFunc = func() net.IP { return net.ParseIP("10.9.8.7") }
- r, _ := k.parseRequest("s1.ns.fed.svc.inter.webs.", dns.TypeA, "inter.webs.")
+ m := new(dns.Msg)
+ state := request.Request{Zone: "inter.webs.", Req: m}
+
+ m.SetQuestion("s1.ns.fed.svc.inter.webs.", dns.TypeA)
+ r, _ := k.parseRequest(state)
testFederationCNAMERecord(t, k, r, msg.Service{Key: "/coredns/webs/inter/svc/fed/ns/s1", Host: "s1.ns.fed.svc.fd-az.fd-r.era.tion.com"})
- r, _ = k.parseRequest("ep1.s1.ns.fed.svc.inter.webs.", dns.TypeA, "inter.webs.")
+ m.SetQuestion("ep1.s1.ns.fed.svc.inter.webs.", dns.TypeA)
+ r, _ = k.parseRequest(state)
testFederationCNAMERecord(t, k, r, msg.Service{Key: "/coredns/webs/inter/svc/fed/ns/s1/ep1", Host: "ep1.s1.ns.fed.svc.fd-az.fd-r.era.tion.com"})
- r, _ = k.parseRequest("ep1.s1.ns.foo.svc.inter.webs.", dns.TypeA, "inter.webs.")
+ m.SetQuestion("ep1.s1.ns.foo.svc.inter.webs.", dns.TypeA)
+ r, _ = k.parseRequest(state)
testFederationCNAMERecord(t, k, r, msg.Service{Key: "", Host: ""})
}
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go
index e710e60f9..be6fde424 100644
--- a/middleware/kubernetes/kubernetes.go
+++ b/middleware/kubernetes/kubernetes.go
@@ -120,7 +120,7 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware.
return []msg.Service{svc}, nil, nil
}
- r, e := k.parseRequest(state.Name(), state.QType(), state.Zone)
+ r, e := k.parseRequest(state)
if e != nil {
return nil, nil, e
}
diff --git a/middleware/kubernetes/ns.go b/middleware/kubernetes/ns.go
index 28de73f2a..8556469c4 100644
--- a/middleware/kubernetes/ns.go
+++ b/middleware/kubernetes/ns.go
@@ -29,7 +29,6 @@ FindEndpoint:
for _, eps := range ep.Subsets {
for _, addr := range eps.Addresses {
if localIP.Equal(net.ParseIP(addr.IP)) {
-
svcNamespace = ep.ObjectMeta.Namespace
svcName = ep.ObjectMeta.Name
break FindEndpoint
diff --git a/middleware/kubernetes/parse.go b/middleware/kubernetes/parse.go
index 790060896..1ab8fd1c6 100644
--- a/middleware/kubernetes/parse.go
+++ b/middleware/kubernetes/parse.go
@@ -2,6 +2,7 @@ package kubernetes
import (
"github.com/coredns/coredns/middleware/pkg/dnsutil"
+ "github.com/coredns/coredns/request"
"github.com/miekg/dns"
)
@@ -23,33 +24,29 @@ type recordRequest struct {
federation string
}
-// TODO(miek): make it use request.Request.
-func (k *Kubernetes) parseRequest(lowerCasedName string, qtype uint16, zone ...string) (r recordRequest, err error) {
+// parseRequest parses the qname to find all the elements we need for querying k8s.
+func (k *Kubernetes) parseRequest(state request.Request) (r recordRequest, err error) {
// 3 Possible cases
// SRV Request: _port._protocol.service.namespace.[federation.]type.zone
// A Request (endpoint): endpoint.service.namespace.[federation.]type.zone
// A Request (service): service.namespace.[federation.]type.zone
- if len(zone) == 0 {
- panic("parseRequest must be called with a zone")
- }
-
- base, _ := dnsutil.TrimZone(lowerCasedName, zone[0])
+ base, _ := dnsutil.TrimZone(state.Name(), state.Zone)
segs := dns.SplitDomainName(base)
- r.zone = zone[0]
+ r.zone = state.Zone
r.federation, segs = k.stripFederation(segs)
- if qtype == dns.TypeNS {
+ if state.QType() == dns.TypeNS {
return r, nil
}
- if qtype == dns.TypeA && isDefaultNS(lowerCasedName, r) {
+ if state.QType() == dns.TypeA && isDefaultNS(state.Name(), r) {
return r, nil
}
offset := 0
- if qtype == dns.TypeSRV {
+ if state.QType() == dns.TypeSRV {
// The kubernetes peer-finder expects queries with empty port and service to resolve
// If neither is specified, treat it as a wildcard
if len(segs) == 3 {
@@ -87,7 +84,7 @@ func (k *Kubernetes) parseRequest(lowerCasedName string, qtype uint16, zone ...s
offset = 2
}
}
- if (qtype == dns.TypeA || qtype == dns.TypeAAAA) && len(segs) == 4 {
+ if (state.QType() == dns.TypeA || state.QType() == dns.TypeAAAA) && len(segs) == 4 {
// This is an endpoint A/AAAA record request. Get first element as endpoint.
r.endpoint = segs[0]
offset = 1
diff --git a/middleware/kubernetes/parse_test.go b/middleware/kubernetes/parse_test.go
index 164bf295e..010b9e542 100644
--- a/middleware/kubernetes/parse_test.go
+++ b/middleware/kubernetes/parse_test.go
@@ -3,6 +3,7 @@ package kubernetes
import (
"testing"
+ "github.com/coredns/coredns/request"
"github.com/miekg/dns"
)
@@ -35,7 +36,11 @@ func TestParseRequest(t *testing.T) {
},
}
for i, tc := range tests {
- r, e := k.parseRequest(tc.query, tc.qtype, zone)
+ m := new(dns.Msg)
+ m.SetQuestion(tc.query, tc.qtype)
+ state := request.Request{Zone: zone, Req: m}
+
+ r, e := k.parseRequest(state)
if e != nil {
t.Errorf("Test %d, expected no error, got '%v'.", i, e)
}
@@ -58,7 +63,11 @@ func TestParseInvalidRequest(t *testing.T) {
}
for query, qtype := range invalid {
- if _, e := k.parseRequest(query, qtype, zone); e == nil {
+ m := new(dns.Msg)
+ m.SetQuestion(query, qtype)
+ state := request.Request{Zone: zone, Req: m}
+
+ if _, e := k.parseRequest(state); e == nil {
t.Errorf("Expected error from %s:%d, got none", query, qtype)
}
}