aboutsummaryrefslogtreecommitdiff
path: root/plugin/kubernetes/kubernetes.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-10-24 12:44:34 +0100
committerGravatar GitHub <noreply@github.com> 2017-10-24 12:44:34 +0100
commitcc490a8912dc5d1afe5f2c2ee53d7fc044496225 (patch)
tree7dece0f2f5051d1a0bd9d133552e52ca4c451379 /plugin/kubernetes/kubernetes.go
parentfcd0342e42a8be5a1cfe41304f0a8099b1bc0e06 (diff)
downloadcoredns-cc490a8912dc5d1afe5f2c2ee53d7fc044496225.tar.gz
coredns-cc490a8912dc5d1afe5f2c2ee53d7fc044496225.tar.zst
coredns-cc490a8912dc5d1afe5f2c2ee53d7fc044496225.zip
plugin/kubernetes: lazy initialze EndPointsList (#1168)
If we don't need it, don't initialize it. Fixes #1156
Diffstat (limited to 'plugin/kubernetes/kubernetes.go')
-rw-r--r--plugin/kubernetes/kubernetes.go17
1 files changed, 11 insertions, 6 deletions
diff --git a/plugin/kubernetes/kubernetes.go b/plugin/kubernetes/kubernetes.go
index 11b6cc882..23b8f1b00 100644
--- a/plugin/kubernetes/kubernetes.go
+++ b/plugin/kubernetes/kubernetes.go
@@ -331,18 +331,20 @@ func (k *Kubernetes) findPods(r recordRequest, zone string) (pods []msg.Service,
func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.Service, err error) {
zonePath := msg.Path(zone, "coredns")
err = errNoItems // Set to errNoItems to signal really nothing found, gets reset when name is matched.
+
var (
- endpointsList []*api.Endpoints
- serviceList []*api.Service
- idx string
+ endpointsListFunc func() []*api.Endpoints
+ endpointsList []*api.Endpoints
+ serviceList []*api.Service
)
+
if wildcard(r.service) || wildcard(r.namespace) {
serviceList = k.APIConn.ServiceList()
- endpointsList = k.APIConn.EndpointsList()
+ endpointsListFunc = func() []*api.Endpoints { return k.APIConn.EndpointsList() }
} else {
- idx = r.service + "." + r.namespace
+ idx := r.service + "." + r.namespace
serviceList = k.APIConn.SvcIndex(idx)
- endpointsList = k.APIConn.EpIndex(idx)
+ endpointsListFunc = func() []*api.Endpoints { return k.APIConn.EpIndex(idx) }
}
for _, svc := range serviceList {
@@ -359,6 +361,9 @@ func (k *Kubernetes) findServices(r recordRequest, zone string) (services []msg.
// Endpoint query or headless service
if svc.Spec.ClusterIP == api.ClusterIPNone || r.endpoint != "" {
+ if endpointsList == nil {
+ endpointsList = endpointsListFunc()
+ }
for _, ep := range endpointsList {
if ep.ObjectMeta.Name != svc.Name || ep.ObjectMeta.Namespace != svc.Namespace {
continue