From f25023ed1bae7656ea8fd5d4e2ecad4c0250eb84 Mon Sep 17 00:00:00 2001 From: stefanprodan Date: Tue, 18 Jun 2019 17:57:00 +0300 Subject: [PATCH] Include selector in service reconciliation - detect changes in the Kubernetes service selectors and ports - preserve the immutable fields when updating the ClusterIP services --- pkg/router/kubernetes.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pkg/router/kubernetes.go b/pkg/router/kubernetes.go index 8760a41f..07710fcc 100644 --- a/pkg/router/kubernetes.go +++ b/pkg/router/kubernetes.go @@ -128,10 +128,13 @@ func (c *KubernetesRouter) reconcileService(canary *flaggerv1.Canary, name strin } if svc != nil { - if diff := cmp.Diff(svcSpec.Ports, svc.Spec.Ports); diff != "" { + portsDiff := cmp.Diff(svcSpec.Ports, svc.Spec.Ports) + selectorsDiff := cmp.Diff(svcSpec.Selector, svc.Spec.Selector) + + if portsDiff != "" || selectorsDiff != "" { svcClone := svc.DeepCopy() - svcClone.Spec = svcSpec - svcClone.Spec.ClusterIP = svc.Spec.ClusterIP + svcClone.Spec.Ports = svcSpec.Ports + svcClone.Spec.Selector = svcSpec.Selector _, err = c.kubeClient.CoreV1().Services(canary.Namespace).Update(svcClone) if err != nil { return fmt.Errorf("service %s update error %v", name, err)