glbc: watch backend service

This commit is contained in:
Nick Sardo 2017-03-21 17:05:17 -07:00
parent 509aaf10c6
commit a94d31e87d

View file

@ -216,18 +216,29 @@ func (s *StoreToIngressLister) List() (ing extensions.IngressList, err error) {
// GetServiceIngress gets all the Ingress' that have rules pointing to a service. // GetServiceIngress gets all the Ingress' that have rules pointing to a service.
// Note that this ignores services without the right nodePorts. // Note that this ignores services without the right nodePorts.
func (s *StoreToIngressLister) GetServiceIngress(svc *api.Service) (ings []extensions.Ingress, err error) { func (s *StoreToIngressLister) GetServiceIngress(svc *api.Service) (ings []extensions.Ingress, err error) {
IngressLoop:
for _, m := range s.Store.List() { for _, m := range s.Store.List() {
ing := *m.(*extensions.Ingress) ing := *m.(*extensions.Ingress)
if ing.Namespace != svc.Namespace { if ing.Namespace != svc.Namespace {
continue continue
} }
for _, rules := range ing.Spec.Rules {
if rules.IngressRuleValue.HTTP == nil { // Check service of default backend
if ing.Spec.Backend != nil && ing.Spec.Backend.ServiceName == svc.Name {
ings = append(ings, ing)
continue
}
// Check the target service for each path rule
for _, rule := range ing.Spec.Rules {
if rule.IngressRuleValue.HTTP == nil {
continue continue
} }
for _, p := range rules.IngressRuleValue.HTTP.Paths { for _, p := range rule.IngressRuleValue.HTTP.Paths {
if p.Backend.ServiceName == svc.Name { if p.Backend.ServiceName == svc.Name {
ings = append(ings, ing) ings = append(ings, ing)
// Skip the rest of the rules to avoid duplicate ingresses in list
continue IngressLoop
} }
} }
} }