@@ -21,7 +21,6 @@ import (
2121
2222 "github.com/argoproj/argo-cd/v2/pkg/apiclient/application"
2323 "github.com/argoproj/argo-cd/v2/pkg/apis/application/v1alpha1"
24- "github.com/miracl/conflate"
2524 "gopkg.in/yaml.v2"
2625)
2726
@@ -416,9 +415,13 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
416415 }
417416
418417 if strings .HasPrefix (app .Annotations [common .WriteBackTargetAnnotation ], common .HelmPrefix ) {
419- images := GetImagesAndAliasesFromApplication (app )
418+ params := make (map [interface {}]interface {})
419+ err = yaml .Unmarshal (originalData , & params )
420+ if err != nil {
421+ return nil , err
422+ }
420423
421- var helmValues string
424+ images := GetImagesAndAliasesFromApplication ( app )
422425 for _ , c := range images {
423426 image := c .ImageAlias
424427 if image == "" {
@@ -442,17 +445,11 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
442445 return nil , fmt .Errorf ("%s parameter not found" , helmAnnotationParamVersion )
443446 }
444447
445- // Build string with YAML format to merge with originalData values
446- helmValues += fmt .Sprintf ("%s: %s\n %s: %s\n " , helmAnnotationParamName , helmParamName .Value , helmAnnotationParamVersion , helmParamVersion .Value )
447- }
448-
449- var mergedParams * conflate.Conflate
450- mergedParams , err = conflate .FromData (originalData , []byte (helmValues ))
451- if err != nil {
452- return nil , err
448+ setNestedField (params , helmAnnotationParamName , helmParamName .Value )
449+ setNestedField (params , helmAnnotationParamVersion , helmParamVersion .Value )
453450 }
454451
455- override , err = mergedParams . MarshalYAML ( )
452+ override , err = yaml . Marshal ( params )
456453 } else {
457454 var params helmOverride
458455 newParams := helmOverride {
@@ -486,6 +483,18 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
486483 return override , nil
487484}
488485
486+ func setNestedField (data map [interface {}]interface {}, fieldPath string , newValue string ) {
487+ fields := strings .Split (fieldPath , "." )
488+ lastFieldIndex := len (fields ) - 1
489+ for i , name := range fields {
490+ if i == lastFieldIndex {
491+ data [name ] = newValue
492+ } else {
493+ data = data [name ].(map [interface {}]interface {})
494+ }
495+ }
496+ }
497+
489498func mergeHelmOverride (t * helmOverride , o * helmOverride ) {
490499 for _ , param := range o .Helm .Parameters {
491500 idx := slices .IndexFunc (t .Helm .Parameters , func (tp v1alpha1.HelmParameter ) bool { return tp .Name == param .Name })
0 commit comments