argocd-image-updater icon indicating copy to clipboard operation
argocd-image-updater copied to clipboard

Argo CD Image Updater causes an infinite loop of syncs with ApplicationSets

Open RiverPhillips opened this issue 2 years ago • 1 comments

Describe the bug I am using ApplicationSets to deploy multiple applications, the template for this ApplicationSet is creating applications with the required annotations for the image updater. This leads to the applications syncing constantly.

I cannot use git writeback as I want to ensure the image tagged main is always deployed.

To Reproduce Steps to reproduce the behaviour:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: name
  namespace: argocd
spec:
  generators:
  - git:
      directories:
      - path: manifests/*/overlays/dev
      repoURL: [email protected]:org/repo.git
      revision: HEAD
  template:
    metadata:
      annotations:
        argocd-image-updater.argoproj.io/image-list: app=foo:main
        argocd-image-updater.argoproj.io/app.update-strategy: digest
      name: '{{path[1]}}'
    spec:
      destination:
        namespace: name
        server: https://kubernetes.default.svc/
      project: project
      source:
        path: '{{path}}'
        repoURL: [email protected]:org/repo.git
        targetRevision: HEAD

Expected behaviour When the image digest changes there should be a sync, but this should not be an infinite loop.

Version Argo CD: v2.3.1 Argo CD Image Updater: v 0.11.3

RiverPhillips avatar Mar 14 '22 09:03 RiverPhillips

I'm afraid that the only way to use Image Updater in combination with ApplicationSet is to use Git write-back. If you use the argocd write-back method, the Image Updater will modify .spec.source of the Application in the cluster, which in turn gets overwritten by ApplicationSet controller again, leading to the situation you are observing.

This behavior most likely needs to change in ApplicationSet controller.

jannfis avatar Mar 14 '22 11:03 jannfis

what about if you add write-back-method. From the doc:

As a rule of thumb, if you are managing Application in Git (i.e. in an app-of-apps setup), you most likely want to chose the Git write-back method.

sali2801 avatar May 09 '23 10:05 sali2801

It'd be really great if you'd mention this in the documentation (in the "Limitations" section maybe?). It would have saved me a lot of time.

tback avatar Jun 21 '23 09:06 tback