mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	middleware/kubernetes: put reverse function in own file (#863)
Move reverse function and (some) test code to reverse*.go
This commit is contained in:
		| @@ -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) | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user