Skip to content

Commit 2ea7b26

Browse files
committed
fix: add regex tag pattern match for Helm parameters in zero-replica deployments
1 parent 96ed722 commit 2ea7b26

File tree

1 file changed

+69
-22
lines changed

1 file changed

+69
-22
lines changed

pkg/argocd/argocd.go

Lines changed: 69 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -593,15 +593,24 @@ func GetImagesFromApplication(app *v1alpha1.Application) image.ContainerImageLis
593593
annotations := app.Annotations
594594
for _, img := range *parseImageList(annotations) {
595595
if img.HasForceUpdateOptionAnnotation(annotations, common.ImageUpdaterAnnotationPrefix) {
596-
// for force-update images, try to get the current image tag from the spec
597-
// this helps handle cases where there are 0 replicas
598-
currentImage := getImageFromSpec(app, img)
599-
if currentImage != nil {
600-
img.ImageTag = currentImage.ImageTag
601-
} else {
602-
img.ImageTag = nil
596+
// Check if this image is already in the list from status
597+
found := false
598+
for _, existingImg := range images {
599+
if existingImg.ImageName == img.ImageName {
600+
found = true
601+
break
602+
}
603+
}
604+
605+
if !found {
606+
currentImage := getImageFromSpec(app, img)
607+
if currentImage != nil {
608+
img.ImageTag = currentImage.ImageTag
609+
} else {
610+
img.ImageTag = nil
611+
}
612+
images = append(images, img)
603613
}
604-
images = append(images, img)
605614
}
606615
}
607616

@@ -751,25 +760,63 @@ func getImageFromSpec(app *v1alpha1.Application, targetImage *image.ContainerIma
751760
switch appType {
752761
case ApplicationTypeHelm:
753762
if source.Helm != nil && source.Helm.Parameters != nil {
754-
// Define regex patterns for tag/version parameters
755-
tagPatterns := []*regexp.Regexp{
756-
regexp.MustCompile(`^(.+\.)?(tag|version|imageTag)$`),
757-
regexp.MustCompile(`^(image|container)\.(.+\.)?(tag|version)$`),
763+
// Try to find image name and tag parameters
764+
var imageName, imageTag string
765+
imageNameParam := targetImage.GetParameterHelmImageName(app.Annotations, common.ImageUpdaterAnnotationPrefix)
766+
imageTagParam := targetImage.GetParameterHelmImageTag(app.Annotations, common.ImageUpdaterAnnotationPrefix)
767+
768+
if imageNameParam == "" {
769+
imageNameParam = registryCommon.DefaultHelmImageName
770+
}
771+
if imageTagParam == "" {
772+
imageTagParam = registryCommon.DefaultHelmImageTag
758773
}
759-
774+
760775
for _, param := range source.Helm.Parameters {
761-
// Check if parameter matches tag/version patterns
762-
for _, pattern := range tagPatterns {
763-
if pattern.MatchString(param.Name) {
764-
foundImage := image.NewFromIdentifier(fmt.Sprintf("%s:%s", targetImage.ImageName, param.Value))
765-
if foundImage != nil && foundImage.ImageName == targetImage.ImageName {
766-
return foundImage
776+
if param.Name == imageNameParam {
777+
imageName = param.Value
778+
}
779+
if param.Name == imageTagParam {
780+
imageTag = param.Value
781+
}
782+
}
783+
784+
if imageName != "" && imageTag != "" && imageName == targetImage.GetFullNameWithoutTag() {
785+
foundImage := image.NewFromIdentifier(fmt.Sprintf("%s:%s", imageName, imageTag))
786+
if foundImage != nil {
787+
return foundImage
788+
}
789+
}
790+
791+
if imageTag == "" {
792+
tagPatterns := []*regexp.Regexp{
793+
regexp.MustCompile(`^(.+\.)?(tag|version|imageTag)$`),
794+
regexp.MustCompile(`^(image|container)\.(.+\.)?(tag|version)$`),
795+
}
796+
797+
for _, param := range source.Helm.Parameters {
798+
for _, pattern := range tagPatterns {
799+
if pattern.MatchString(param.Name) && param.Value != "" {
800+
prefix := strings.TrimSuffix(param.Name, ".tag")
801+
prefix = strings.TrimSuffix(prefix, ".version")
802+
prefix = strings.TrimSuffix(prefix, ".imageTag")
803+
804+
for _, p := range source.Helm.Parameters {
805+
if (p.Name == prefix || p.Name == prefix+".name" || p.Name == prefix+".repository") &&
806+
p.Value == targetImage.GetFullNameWithoutTag() {
807+
foundImage := image.NewFromIdentifier(fmt.Sprintf("%s:%s", targetImage.GetFullNameWithoutTag(), param.Value))
808+
if foundImage != nil {
809+
return foundImage
810+
}
811+
}
812+
}
767813
}
768-
break
769814
}
770815
}
771-
772-
if param.Name == "image" || param.Name == "image.repository" {
816+
}
817+
818+
for _, param := range source.Helm.Parameters {
819+
if param.Name == "image" || param.Name == "image.repository" || param.Name == registryCommon.DefaultHelmImageName {
773820
foundImage := image.NewFromIdentifier(param.Value)
774821
if foundImage != nil && foundImage.ImageName == targetImage.ImageName {
775822
return foundImage

0 commit comments

Comments
 (0)