Commit 449af81d authored by Geoff Simmons's avatar Geoff Simmons

Bugfix: sync is incomplete if Endpoints undefined for an IngressBackend.

parent 4f8b60b4
...@@ -279,7 +279,12 @@ func (worker *NamespaceWorker) ingBackend2Addrs( ...@@ -279,7 +279,12 @@ func (worker *NamespaceWorker) ingBackend2Addrs(
return return
} }
addrs, err = endpsTargetPort2Addrs(svc, endps, targetPort) addrs, status = endpsTargetPort2Addrs(svc, endps, targetPort)
if len(addrs) == 0 || addrs == nil {
status = update.MakeIncomplete(
"Service %s/%s: no addresses found", svc.Namespace,
svc.Name)
}
return return
} }
...@@ -464,6 +469,12 @@ func (worker *NamespaceWorker) ings2VCLSpec( ...@@ -464,6 +469,12 @@ func (worker *NamespaceWorker) ings2VCLSpec(
if status.IsError() { if status.IsError() {
return vclSpec, bcfgs, status return vclSpec, bcfgs, status
} }
if extName == "" &&
(addrs == nil || len(addrs) == 0) {
panic("len(addrs)==0 namespace=" +
namespace + " IngressBackend=" +
path.Backend.String())
}
vclSvc, bcfg, status := worker. vclSvc, bcfg, status := worker.
getVCLSvc(namespace, getVCLSvc(namespace,
path.Backend.ServiceName, addrs, path.Backend.ServiceName, addrs,
......
...@@ -81,12 +81,25 @@ func (worker *NamespaceWorker) getServiceEndpoints( ...@@ -81,12 +81,25 @@ func (worker *NamespaceWorker) getServiceEndpoints(
func endpsTargetPort2Addrs( func endpsTargetPort2Addrs(
svc *api_v1.Service, svc *api_v1.Service,
endps *api_v1.Endpoints, endps *api_v1.Endpoints,
targetPort int32) ([]vcl.Address, error) { targetPort int32) ([]vcl.Address, update.Status) {
var addrs []vcl.Address var addrs []vcl.Address
if len(endps.Subsets) == 0 {
return addrs, update.MakeIncomplete(
"Service %s/%s: currently no endpoint subsets",
svc.Namespace, svc.Name)
}
for _, subset := range endps.Subsets { for _, subset := range endps.Subsets {
for _, port := range subset.Ports { for _, port := range subset.Ports {
if port.Port == targetPort { if port.Port == targetPort {
if len(subset.Addresses) == 0 {
return addrs, update.MakeIncomplete(
"Service %s/%s port %d: "+
"Endpoints subset is "+
"currently empty",
svc.Namespace, svc.Name,
targetPort)
}
for _, address := range subset.Addresses { for _, address := range subset.Addresses {
addr := vcl.Address{ addr := vcl.Address{
IP: address.IP, IP: address.IP,
...@@ -94,12 +107,13 @@ func endpsTargetPort2Addrs( ...@@ -94,12 +107,13 @@ func endpsTargetPort2Addrs(
} }
addrs = append(addrs, addr) addrs = append(addrs, addr)
} }
return addrs, nil return addrs, update.MakeSuccess("")
} }
} }
} }
return addrs, fmt.Errorf("No endpoints for service port %d in service "+ return addrs, update.MakeFatal(
"%s/%s", targetPort, svc.Namespace, svc.Name) "No endpoints match service port %d in service %s/%s",
targetPort, svc.Namespace, svc.Name)
} }
// findPort returns the container port number for a Pod and // findPort returns the container port number for a Pod and
......
...@@ -680,6 +680,14 @@ func (vc *Controller) Update( ...@@ -680,6 +680,14 @@ func (vc *Controller) Update(
bcfgMeta map[string]Meta, bcfgMeta map[string]Meta,
) update.Status { ) update.Status {
var secrPtr *[]byte var secrPtr *[]byte
for key, svc := range spec.IntSvcs {
if svc.Addresses == nil || len(svc.Addresses) == 0 {
return update.MakeIncomplete(
"Backend service %s: no addresses specified",
key)
}
}
svc, exists := vc.svcs[svcKey] svc, exists := vc.svcs[svcKey]
if !exists { if !exists {
svc = &varnishSvc{ svc = &varnishSvc{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment