diff options
| -rw-r--r-- | pkg/argocd/update.go | 26 | ||||
| -rw-r--r-- | pkg/argocd/update_test.go | 51 |
2 files changed, 66 insertions, 11 deletions
diff --git a/pkg/argocd/update.go b/pkg/argocd/update.go index 8520410..d239514 100644 --- a/pkg/argocd/update.go +++ b/pkg/argocd/update.go @@ -451,8 +451,23 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by if helmAnnotationParamName == "" { return nil, fmt.Errorf("could not find an image-name annotation for image %s", c.ImageName) } + // for image-spec annotation, helmAnnotationParamName holds image-spec annotation value, + // and helmAnnotationParamVersion is empty if helmAnnotationParamVersion == "" { - return nil, fmt.Errorf("could not find an image-tag annotation for image %s", c.ImageName) + if c.GetParameterHelmImageSpec(app.Annotations) == "" { + // not a full image-spec, so image-tag is required + return nil, fmt.Errorf("could not find an image-tag annotation for image %s", c.ImageName) + } + } else { + // image-tag annotation is present, so continue to process image-tag + helmParamVersion := getHelmParam(appSource.Helm.Parameters, helmAnnotationParamVersion) + if helmParamVersion == nil { + return nil, fmt.Errorf("%s parameter not found", helmAnnotationParamVersion) + } + err = setHelmValue(&helmNewValues, helmAnnotationParamVersion, helmParamVersion.Value) + if err != nil { + return nil, fmt.Errorf("failed to set image parameter version value: %v", err) + } } helmParamName := getHelmParam(appSource.Helm.Parameters, helmAnnotationParamName) @@ -460,19 +475,10 @@ func marshalParamsOverride(app *v1alpha1.Application, originalData []byte) ([]by return nil, fmt.Errorf("%s parameter not found", helmAnnotationParamName) } - helmParamVersion := getHelmParam(appSource.Helm.Parameters, helmAnnotationParamVersion) - if helmParamVersion == nil { - return nil, fmt.Errorf("%s parameter not found", helmAnnotationParamVersion) - } - err = setHelmValue(&helmNewValues, helmAnnotationParamName, helmParamName.Value) if err != nil { return nil, fmt.Errorf("failed to set image parameter name value: %v", err) } - err = setHelmValue(&helmNewValues, helmAnnotationParamVersion, helmParamVersion.Value) - if err != nil { - return nil, fmt.Errorf("failed to set image parameter version value: %v", err) - } } override, err = yaml.Marshal(helmNewValues) diff --git a/pkg/argocd/update_test.go b/pkg/argocd/update_test.go index bd67d3b..28be494 100644 --- a/pkg/argocd/update_test.go +++ b/pkg/argocd/update_test.go @@ -1383,6 +1383,56 @@ replicas: 1 assert.Equal(t, strings.TrimSpace(strings.ReplaceAll(expected, "\t", " ")), strings.TrimSpace(string(yaml))) }) + t.Run("Valid Helm source with Helm values file and image-spec", func(t *testing.T) { + expected := ` +image.spec.foo: nginx:v1.0.0 +replicas: 1 +` + app := v1alpha1.Application{ + ObjectMeta: v1.ObjectMeta{ + Name: "testapp", + Annotations: map[string]string{ + "argocd-image-updater.argoproj.io/image-list": "nginx", + "argocd-image-updater.argoproj.io/write-back-method": "git", + "argocd-image-updater.argoproj.io/write-back-target": "helmvalues:./test-values.yaml", + "argocd-image-updater.argoproj.io/nginx.helm.image-spec": "image.spec.foo", + }, + }, + Spec: v1alpha1.ApplicationSpec{ + Source: &v1alpha1.ApplicationSource{ + RepoURL: "https://example.com/example", + TargetRevision: "main", + Helm: &v1alpha1.ApplicationSourceHelm{ + Parameters: []v1alpha1.HelmParameter{ + { + Name: "image.spec.foo", + Value: "nginx:v1.0.0", + ForceString: true, + }, + }, + }, + }, + }, + Status: v1alpha1.ApplicationStatus{ + SourceType: v1alpha1.ApplicationSourceTypeHelm, + Summary: v1alpha1.ApplicationSummary{ + Images: []string{ + "nginx:v0.0.0", + }, + }, + }, + } + + originalData := []byte(` +image.spec.foo: nginx:v0.0.0 +replicas: 1 +`) + yaml, err := marshalParamsOverride(&app, originalData) + require.NoError(t, err) + assert.NotEmpty(t, yaml) + assert.Equal(t, strings.TrimSpace(strings.ReplaceAll(expected, "\t", " ")), strings.TrimSpace(string(yaml))) + }) + t.Run("Valid Helm source with Helm values file with multiple images", func(t *testing.T) { expected := ` nginx.image.name: nginx @@ -1834,7 +1884,6 @@ replicas: 1 originalData := []byte(`random: yaml`) _, err := marshalParamsOverride(&app, originalData) assert.Error(t, err) - assert.Equal(t, "wrongimage.name parameter not found", err.Error()) }) t.Run("Image-tag annotation value not found in Helm source parameters list", func(t *testing.T) { |
