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(
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
}
......@@ -464,6 +469,12 @@ func (worker *NamespaceWorker) ings2VCLSpec(
if status.IsError() {
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.
getVCLSvc(namespace,
path.Backend.ServiceName, addrs,
......
......@@ -81,12 +81,25 @@ func (worker *NamespaceWorker) getServiceEndpoints(
func endpsTargetPort2Addrs(
svc *api_v1.Service,
endps *api_v1.Endpoints,
targetPort int32) ([]vcl.Address, error) {
targetPort int32) ([]vcl.Address, update.Status) {
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 _, port := range subset.Ports {
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 {
addr := vcl.Address{
IP: address.IP,
......@@ -94,12 +107,13 @@ func endpsTargetPort2Addrs(
}
addrs = append(addrs, addr)
}
return addrs, nil
return addrs, update.MakeSuccess("")
}
}
}
return addrs, fmt.Errorf("No endpoints for service port %d in service "+
"%s/%s", targetPort, svc.Namespace, svc.Name)
return addrs, update.MakeFatal(
"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
......
......@@ -680,6 +680,14 @@ func (vc *Controller) Update(
bcfgMeta map[string]Meta,
) update.Status {
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]
if !exists {
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