diff --git a/pkg/cluster/resources.go b/pkg/cluster/resources.go index aa5964302f713f6645b4e65cef93a9271500a770..d9318ed04fb4260a445da2e5481437ec91f9fd6e 100644 --- a/pkg/cluster/resources.go +++ b/pkg/cluster/resources.go @@ -250,6 +250,20 @@ func (c *Cluster) updateService(role PostgresRole, newService *v1.Service) error } serviceName := util.NameFromMeta(c.Service[role].ObjectMeta) + if len(newService.ObjectMeta.Annotations) > 0 { + + annotationsPatchData := metadataAnnotationsPatch(newService.ObjectMeta.Annotations) + + _, err := c.KubeClient.Services(c.Service[role].Namespace).Patch( + c.Service[role].Name, + api.StrategicMergePatchType, + []byte(annotationsPatchData), "") + + if err != nil { + return fmt.Errorf("could not replace annotations for the service '%s': %v", serviceName, err) + } + } + patchData, err := specPatch(newService.Spec) if err != nil { return fmt.Errorf("could not form patch for the service '%s': %v", serviceName, err) @@ -267,6 +281,7 @@ func (c *Cluster) updateService(role PostgresRole, newService *v1.Service) error return nil } + func (c *Cluster) deleteService(role PostgresRole) error { c.logger.Debugf("Deleting service %s", role) if c.Service[role] == nil { diff --git a/pkg/cluster/util.go b/pkg/cluster/util.go index b6416cd7ba4fbbea1ce2a4646b637e39133b0c3d..71986aa57c9811408a5809a95ffc61e4c66a90d0 100644 --- a/pkg/cluster/util.go +++ b/pkg/cluster/util.go @@ -63,6 +63,16 @@ func specPatch(spec interface{}) ([]byte, error) { }{spec}) } +func metadataAnnotationsPatch(annotations map[string]string) (string) { + annotationsList := make([]string, 0, len(annotations)) + + for name, value := range(annotations) { + annotationsList = append(annotationsList, fmt.Sprintf(`"%s":"%s"`, name, value)) + } + annotationsString := strings.Join(annotationsList, ",") + return fmt.Sprintf(`{"metadata":{"annotations": {"$patch":"replace", %s}}}`, annotationsString) +} + func (c *Cluster) logStatefulSetChanges(old, new *v1beta1.StatefulSet, isUpdate bool, reasons []string) { if isUpdate { c.logger.Infof("statefulset '%s' has been changed",