summaryrefslogtreecommitdiff
path: root/pkg/argocd
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/argocd')
-rw-r--r--pkg/argocd/update.go26
-rw-r--r--pkg/argocd/update_test.go51
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) {