Skip to content

Commit 44f5996

Browse files
committed
fix(write-back): Duplicate image entries with different formats when updating two images
Signed-off-by: Cheng Fang <cfang@redhat.com>
1 parent add409e commit 44f5996

2 files changed

Lines changed: 72 additions & 6 deletions

File tree

pkg/argocd/update.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -551,13 +551,24 @@ func mergeHelmOverride(t *helmOverride, o *helmOverride) {
551551
}
552552

553553
func mergeKustomizeOverride(t *kustomizeOverride, o *kustomizeOverride) {
554-
for _, image := range *o.Kustomize.Images {
555-
idx := t.Kustomize.Images.Find(image)
556-
if idx != -1 {
557-
(*t.Kustomize.Images)[idx] = image
558-
continue
554+
for _, newImage := range *o.Kustomize.Images {
555+
found := false
556+
newContainerImage := image.NewFromIdentifier(string(newImage))
557+
for idx, existingImage := range *t.Kustomize.Images {
558+
existingContainerImage := image.NewFromIdentifier(string(existingImage))
559+
if newContainerImage.ImageName == existingContainerImage.ImageName &&
560+
newContainerImage.RegistryURL == existingContainerImage.RegistryURL {
561+
found = true
562+
if existingContainerImage.ImageTag == nil ||
563+
!(existingContainerImage.ImageTag).Equals(newContainerImage.ImageTag) {
564+
(*t.Kustomize.Images)[idx] = newImage
565+
}
566+
break
567+
}
568+
}
569+
if !found {
570+
*t.Kustomize.Images = append(*t.Kustomize.Images, newImage)
559571
}
560-
*t.Kustomize.Images = append(*t.Kustomize.Images, image)
561572
}
562573
}
563574

pkg/argocd/update_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3643,3 +3643,58 @@ func Test_GetRepositoryLock(t *testing.T) {
36433643
require.NotNil(t, state.repositoryLocks[repo2])
36443644
require.Equal(t, lock3, state.repositoryLocks[repo2])
36453645
}
3646+
3647+
func Test_mergeKustomizeOverride(t *testing.T) {
3648+
tests := []struct {
3649+
name string
3650+
existing v1alpha1.KustomizeImages
3651+
new v1alpha1.KustomizeImages
3652+
expected v1alpha1.KustomizeImages
3653+
}{
3654+
{"with-tag", []v1alpha1.KustomizeImage{"nginx:foo"},
3655+
[]v1alpha1.KustomizeImage{"nginx:foo"},
3656+
[]v1alpha1.KustomizeImage{"nginx:foo"}},
3657+
{"with-tag-1", []v1alpha1.KustomizeImage{"nginx"},
3658+
[]v1alpha1.KustomizeImage{"nginx:latest"},
3659+
[]v1alpha1.KustomizeImage{"nginx:latest"}},
3660+
{"with-tag-sha", []v1alpha1.KustomizeImage{"nginx:latest"},
3661+
[]v1alpha1.KustomizeImage{"nginx:latest@sha256:91734281c0ebfc6f1aea979cffeed5079cfe786228a71cc6f1f46a228cde6e34"},
3662+
[]v1alpha1.KustomizeImage{"nginx:latest@sha256:91734281c0ebfc6f1aea979cffeed5079cfe786228a71cc6f1f46a228cde6e34"}},
3663+
3664+
{"2-images", []v1alpha1.KustomizeImage{"nginx:latest",
3665+
"bitnami/nginx:latest@sha256:1a2fe3f9f6d1d38d5a7ee35af732fdb7d15266ec3dbc79bbc0355742cd24d3ec"},
3666+
[]v1alpha1.KustomizeImage{"nginx:latest@sha256:91734281c0ebfc6f1aea979cffeed5079cfe786228a71cc6f1f46a228cde6e34",
3667+
"bitnami/nginx@sha256:1a2fe3f9f6d1d38d5a7ee35af732fdb7d15266ec3dbc79bbc0355742cd24d3ec"},
3668+
[]v1alpha1.KustomizeImage{"nginx:latest@sha256:91734281c0ebfc6f1aea979cffeed5079cfe786228a71cc6f1f46a228cde6e34",
3669+
"bitnami/nginx:latest@sha256:1a2fe3f9f6d1d38d5a7ee35af732fdb7d15266ec3dbc79bbc0355742cd24d3ec"}},
3670+
3671+
{"with-registry", []v1alpha1.KustomizeImage{"quay.io/nginx:latest"},
3672+
[]v1alpha1.KustomizeImage{"quay.io/nginx:latest"},
3673+
[]v1alpha1.KustomizeImage{"quay.io/nginx:latest"}},
3674+
{"with-registry-1", []v1alpha1.KustomizeImage{"quay.io/nginx:latest"},
3675+
[]v1alpha1.KustomizeImage{"docker.io/nginx:latest"},
3676+
[]v1alpha1.KustomizeImage{"docker.io/nginx:latest", "quay.io/nginx:latest"}},
3677+
}
3678+
for _, tt := range tests {
3679+
t.Run(tt.name, func(t *testing.T) {
3680+
existingImages := kustomizeOverride{
3681+
Kustomize: kustomizeImages{
3682+
Images: &tt.existing,
3683+
},
3684+
}
3685+
newImages := kustomizeOverride{
3686+
Kustomize: kustomizeImages{
3687+
Images: &tt.new,
3688+
},
3689+
}
3690+
expectedImages := kustomizeOverride{
3691+
Kustomize: kustomizeImages{
3692+
Images: &tt.expected,
3693+
},
3694+
}
3695+
3696+
mergeKustomizeOverride(&existingImages, &newImages)
3697+
assert.ElementsMatch(t, *expectedImages.Kustomize.Images, *existingImages.Kustomize.Images)
3698+
})
3699+
}
3700+
}

0 commit comments

Comments
 (0)