middleware/kubernetes: put reverse function in own file (#863)
Move reverse function and (some) test code to reverse*.go
This commit is contained in:
parent
be037a32a5
commit
df1879f9ae
4 changed files with 66 additions and 52 deletions
|
@ -11,7 +11,6 @@ import (
|
||||||
|
|
||||||
"github.com/coredns/coredns/middleware"
|
"github.com/coredns/coredns/middleware"
|
||||||
"github.com/coredns/coredns/middleware/etcd/msg"
|
"github.com/coredns/coredns/middleware/etcd/msg"
|
||||||
"github.com/coredns/coredns/middleware/pkg/dnsutil"
|
|
||||||
dnsstrings "github.com/coredns/coredns/middleware/pkg/strings"
|
dnsstrings "github.com/coredns/coredns/middleware/pkg/strings"
|
||||||
"github.com/coredns/coredns/middleware/proxy"
|
"github.com/coredns/coredns/middleware/proxy"
|
||||||
"github.com/coredns/coredns/request"
|
"github.com/coredns/coredns/request"
|
||||||
|
@ -159,28 +158,6 @@ func (k *Kubernetes) PrimaryZone() string {
|
||||||
return k.Zones[k.primaryZone]
|
return k.Zones[k.primaryZone]
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reverse implements the ServiceBackend interface.
|
|
||||||
func (k *Kubernetes) Reverse(state request.Request, exact bool, opt middleware.Options) ([]msg.Service, []msg.Service, error) {
|
|
||||||
|
|
||||||
ip := dnsutil.ExtractAddressFromReverse(state.Name())
|
|
||||||
if ip == "" {
|
|
||||||
return nil, nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
records := k.getServiceRecordForIP(ip, state.Name())
|
|
||||||
return records, nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (k *Kubernetes) isRequestInReverseRange(name string) bool {
|
|
||||||
ip := dnsutil.ExtractAddressFromReverse(name)
|
|
||||||
for _, c := range k.ReverseCidrs {
|
|
||||||
if c.Contains(net.ParseIP(ip)) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lookup implements the ServiceBackend interface.
|
// Lookup implements the ServiceBackend interface.
|
||||||
func (k *Kubernetes) Lookup(state request.Request, name string, typ uint16) (*dns.Msg, error) {
|
func (k *Kubernetes) Lookup(state request.Request, name string, typ uint16) (*dns.Msg, error) {
|
||||||
return k.Proxy.Lookup(state, name, typ)
|
return k.Proxy.Lookup(state, name, typ)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package kubernetes
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -33,33 +32,6 @@ func TestPrimaryZone(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIsRequestInReverseRange(t *testing.T) {
|
|
||||||
|
|
||||||
tests := []struct {
|
|
||||||
cidr string
|
|
||||||
name string
|
|
||||||
expected bool
|
|
||||||
}{
|
|
||||||
{"1.2.3.0/24", "4.3.2.1.in-addr.arpa.", true},
|
|
||||||
{"1.2.3.0/24", "5.3.2.1.in-addr.arpa.", true},
|
|
||||||
{"1.2.3.0/24", "5.4.2.1.in-addr.arpa.", false},
|
|
||||||
{"5.6.0.0/16", "5.4.2.1.in-addr.arpa.", false},
|
|
||||||
{"5.6.0.0/16", "5.4.6.5.in-addr.arpa.", true},
|
|
||||||
{"5.6.0.0/16", "5.6.0.1.in-addr.arpa.", false},
|
|
||||||
}
|
|
||||||
|
|
||||||
k := Kubernetes{Zones: []string{"inter.webs.test"}}
|
|
||||||
|
|
||||||
for _, test := range tests {
|
|
||||||
_, cidr, _ := net.ParseCIDR(test.cidr)
|
|
||||||
k.ReverseCidrs = []net.IPNet{*cidr}
|
|
||||||
result := k.isRequestInReverseRange(test.name)
|
|
||||||
if result != test.expected {
|
|
||||||
t.Errorf("Expected '%v' for '%v' in %v.", test.expected, test.name, test.cidr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestIsNameError(t *testing.T) {
|
func TestIsNameError(t *testing.T) {
|
||||||
k := Kubernetes{Zones: []string{"inter.webs.test"}}
|
k := Kubernetes{Zones: []string{"inter.webs.test"}}
|
||||||
if !k.IsNameError(errNoItems) {
|
if !k.IsNameError(errNoItems) {
|
||||||
|
@ -77,7 +49,7 @@ func TestIsNameError(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSymbolContainsWildcard(t *testing.T) {
|
func TestWildcard(t *testing.T) {
|
||||||
var tests = []struct {
|
var tests = []struct {
|
||||||
s string
|
s string
|
||||||
expected bool
|
expected bool
|
||||||
|
|
32
middleware/kubernetes/reverse.go
Normal file
32
middleware/kubernetes/reverse.go
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
package kubernetes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
|
||||||
|
"github.com/coredns/coredns/middleware"
|
||||||
|
"github.com/coredns/coredns/middleware/etcd/msg"
|
||||||
|
"github.com/coredns/coredns/middleware/pkg/dnsutil"
|
||||||
|
"github.com/coredns/coredns/request"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reverse implements the ServiceBackend interface.
|
||||||
|
func (k *Kubernetes) Reverse(state request.Request, exact bool, opt middleware.Options) ([]msg.Service, []msg.Service, error) {
|
||||||
|
|
||||||
|
ip := dnsutil.ExtractAddressFromReverse(state.Name())
|
||||||
|
if ip == "" {
|
||||||
|
return nil, nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
records := k.getServiceRecordForIP(ip, state.Name())
|
||||||
|
return records, nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (k *Kubernetes) isRequestInReverseRange(name string) bool {
|
||||||
|
ip := dnsutil.ExtractAddressFromReverse(name)
|
||||||
|
for _, c := range k.ReverseCidrs {
|
||||||
|
if c.Contains(net.ParseIP(ip)) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
33
middleware/kubernetes/reverse_test.go
Normal file
33
middleware/kubernetes/reverse_test.go
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
package kubernetes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestIsRequestInReverseRange(t *testing.T) {
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
cidr string
|
||||||
|
name string
|
||||||
|
expected bool
|
||||||
|
}{
|
||||||
|
{"1.2.3.0/24", "4.3.2.1.in-addr.arpa.", true},
|
||||||
|
{"1.2.3.0/24", "5.3.2.1.in-addr.arpa.", true},
|
||||||
|
{"1.2.3.0/24", "5.4.2.1.in-addr.arpa.", false},
|
||||||
|
{"5.6.0.0/16", "5.4.2.1.in-addr.arpa.", false},
|
||||||
|
{"5.6.0.0/16", "5.4.6.5.in-addr.arpa.", true},
|
||||||
|
{"5.6.0.0/16", "5.6.0.1.in-addr.arpa.", false},
|
||||||
|
}
|
||||||
|
|
||||||
|
k := Kubernetes{Zones: []string{"inter.webs.test"}}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
_, cidr, _ := net.ParseCIDR(test.cidr)
|
||||||
|
k.ReverseCidrs = []net.IPNet{*cidr}
|
||||||
|
result := k.isRequestInReverseRange(test.name)
|
||||||
|
if result != test.expected {
|
||||||
|
t.Errorf("Expected '%v' for '%v' in %v.", test.expected, test.name, test.cidr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue