Skip to content

Commit f6e8066

Browse files
committed
Fix image update & helm value writter
1 parent 3538c22 commit f6e8066

File tree

2 files changed

+37
-8
lines changed

2 files changed

+37
-8
lines changed

pkg/argocd/argocd.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,12 @@ func GetImagesFromApplication(app *v1alpha1.Application) image.ContainerImageLis
503503
return images
504504
}
505505

506+
func GetImagesFromImageList(app *v1alpha1.Application) image.ContainerImageList {
507+
images := make(image.ContainerImageList, 0)
508+
images = append(images, *parseImageList(app.Annotations)...)
509+
return images
510+
}
511+
506512
// GetApplicationTypeByName first retrieves application with given appName and
507513
// returns its application type
508514
func GetApplicationTypeByName(client ArgoCD, appName string) (ApplicationType, error) {

pkg/argocd/update.go

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -416,15 +416,15 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
416416
}
417417

418418
if strings.HasPrefix(app.Annotations[common.WriteBackTargetAnnotation], common.HelmPrefix) {
419-
images := GetImagesFromApplication(app)
419+
images := GetImagesFromImageList(app)
420420

421421
for _, c := range images {
422-
helmAnnotationParamName, helmAnnotationParamVersion := getHelmParamNamesFromAnnotation(app.Annotations, c.ImageName)
422+
helmAnnotationParamName, helmAnnotationParamVersion := getHelmParamNamesFromAnnotation(app.Annotations, c.ImageAlias)
423423
if helmAnnotationParamName == "" {
424-
return nil, fmt.Errorf("could not find an image-name annotation for image %s", c.ImageName)
424+
return nil, fmt.Errorf("could not find an image-name annotation for image %s", c.ImageAlias)
425425
}
426426
if helmAnnotationParamVersion == "" {
427-
return nil, fmt.Errorf("could not find an image-tag annotation for image %s", c.ImageName)
427+
return nil, fmt.Errorf("could not find an image-tag annotation for image %s", c.ImageAlias)
428428
}
429429

430430
helmParamName := getHelmParam(appSource.Helm.Parameters, helmAnnotationParamName)
@@ -437,11 +437,16 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
437437
return nil, fmt.Errorf("%s parameter not found", helmAnnotationParamVersion)
438438
}
439439

440-
// Build string with YAML format to merge with originalData values
441-
helmValues := fmt.Sprintf("%s: %s\n%s: %s", helmAnnotationParamName, helmParamName.Value, helmAnnotationParamVersion, helmParamVersion.Value)
442-
443440
var mergedParams *conflate.Conflate
444-
mergedParams, err = conflate.FromData(originalData, []byte(helmValues))
441+
mergedParams, err = conflate.FromData(originalData)
442+
if err != nil {
443+
return nil, err
444+
}
445+
446+
err = mergedParams.AddGo(
447+
dotToObj(helmAnnotationParamName, helmParamName.Value),
448+
dotToObj(helmAnnotationParamVersion, helmParamVersion.Value),
449+
)
445450
if err != nil {
446451
return nil, err
447452
}
@@ -481,6 +486,24 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by
481486
return override, nil
482487
}
483488

489+
func dotToObj(key string, value string) map[string]interface{} {
490+
keys := strings.Split(key, ".")
491+
obj := make(map[string]interface{})
492+
493+
current := obj
494+
for i, k := range keys {
495+
if i == len(keys)-1 {
496+
current[k] = value
497+
} else {
498+
currentMap := make(map[string]interface{})
499+
current[k] = currentMap
500+
current = currentMap
501+
}
502+
}
503+
504+
return obj
505+
}
506+
484507
func mergeHelmOverride(t *helmOverride, o *helmOverride) {
485508
for _, param := range o.Helm.Parameters {
486509
idx := slices.IndexFunc(t.Helm.Parameters, func(tp v1alpha1.HelmParameter) bool { return tp.Name == param.Name })

0 commit comments

Comments
 (0)