diff options
author | 2017-10-24 12:44:34 +0100 | |
---|---|---|
committer | 2017-10-24 12:44:34 +0100 | |
commit | cc490a8912dc5d1afe5f2c2ee53d7fc044496225 (patch) | |
tree | 7dece0f2f5051d1a0bd9d133552e52ca4c451379 /plugin/kubernetes/kubernetes.go | |
parent | fcd0342e42a8be5a1cfe41304f0a8099b1bc0e06 (diff) | |
download | coredns-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.go | 17 |
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 |