Replace service annotations when updating services.
In case the whole annotation changes (like the external DNS) we don't want to keep the old one hanging around. Unline specs, we don't expect anyone except the operator to change the annotations. Use StrategicMergePatchType in order to replace the annotations map completely.
This commit is contained in:
		
							parent
							
								
									e0dacd0ca9
								
							
						
					
					
						commit
						51d73fb172
					
				|  | @ -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 { | ||||
|  |  | |||
|  | @ -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", | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue