Skip to content

Commit 796f055

Browse files
authored
Fix --three-way-merge to not show diff on meta.helm.sh annotations (#331)
Fixes #326
1 parent b44a8ec commit 796f055

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

cmd/upgrade.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ func genManifest(original, target kube.ResourceList) ([]byte, []byte, error) {
331331
}
332332
// to be updated
333333
out, _ := jsoniterator.ConfigCompatibleWithStandardLibrary.Marshal(currentObj)
334-
pruneObj, err := deleteStatusAndManagedFields(out)
334+
pruneObj, err := deleteStatusAndTidyMetadata(out)
335335
if err != nil {
336336
return errors.Wrapf(err, "prune current obj %q with kind %s", info.Name, kind)
337337
}
@@ -358,7 +358,7 @@ func genManifest(original, target kube.ResourceList) ([]byte, []byte, error) {
358358
return errors.Wrapf(err, "cannot patch %q with kind %s", info.Name, kind)
359359
}
360360
out, _ = jsoniterator.ConfigCompatibleWithStandardLibrary.Marshal(targetObj)
361-
pruneObj, err = deleteStatusAndManagedFields(out)
361+
pruneObj, err = deleteStatusAndTidyMetadata(out)
362362
if err != nil {
363363
return errors.Wrapf(err, "prune current obj %q with kind %s", info.Name, kind)
364364
}
@@ -537,14 +537,28 @@ func existingResourceConflict(resources kube.ResourceList) (kube.ResourceList, e
537537
return requireUpdate, err
538538
}
539539

540-
func deleteStatusAndManagedFields(obj []byte) (map[string]interface{}, error) {
540+
func deleteStatusAndTidyMetadata(obj []byte) (map[string]interface{}, error) {
541541
var objectMap map[string]interface{}
542542
err := jsoniterator.Unmarshal(obj, &objectMap)
543543
if err != nil {
544544
return nil, errors.Wrap(err, "could not unmarshal byte sequence")
545545
}
546+
546547
delete(objectMap, "status")
547-
delete(objectMap["metadata"].(map[string]interface{}), "managedFields")
548+
549+
metadata := objectMap["metadata"].(map[string]interface{})
550+
551+
delete(metadata, "managedFields")
552+
553+
if a := metadata["annotations"]; a != nil {
554+
annotations := a.(map[string]interface{})
555+
delete(annotations, "meta.helm.sh/release-name")
556+
delete(annotations, "meta.helm.sh/release-namespace")
557+
558+
if len(annotations) == 0 {
559+
delete(metadata, "annotations")
560+
}
561+
}
548562

549563
return objectMap, nil
550564
}

0 commit comments

Comments
 (0)