Skip to content

Commit 5d27582

Browse files
committed
Refactor helm values merging logic
Signed-off-by: Aleksandr Petrov <burnb83@gmail.com>
1 parent 4bae9be commit 5d27582

File tree

1 file changed

+21
-12
lines changed

1 file changed

+21
-12
lines changed

pkg/argocd/update.go

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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 := GetImagesFromApplication(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 := GetImagesFromApplication(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+
489498
func 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

Comments
 (0)