ArgoCd ApplicationSet is more practical in version v2.9

Tanat Lokejaroenlarb
NonTechCompany
Published in
3 min readApr 27, 2024

Most of you who are following the ArgoCD project might know this already. With the ArgoCD v2.9, there was a specific feature that made it part of the release and I want to share it with you in this post.

What feature I’m referring to and why it makes ApplicationSet more practical?

If you use ApplicationSet to generate your Applications, you must have noticed that you cannot disable the auto-sync of the generated Applications.

This issue has been discussed in detail in this issue: https://github.com/argoproj/argo-cd/issues/9101

The too-long, did-not-read version of the issue is,

ApplicationSets automatically override manual Application parameter overrides

For example, in my use case, I have an ApplicationSet that generates a specific Application for all of my Kubernetes clusters.

As a cluster maintainer, one day, I was notified about some problems happening in one of the clusters, and it seemed to be related to the application that was installed via ApplicationSet.

I needed to mitigate the issue by changing some of the parameters on the fly in those specific clusters. I tried to disable the auto-sync of the application so that I could perform some actions. However, the ApplicationSet controller would always revert the state to auto-sync.

This is not a “bug” per se as this behavior enforces a respected GitOps principle and every change should be done via code instead of manually overriding some values in a specific Application.

However, it has not been so practical for me, especially as an SRE who needs to monitor live production systems and I need to fix something quick at 4 AM during the night.

This limitation spans more than this specific use case. As described in Github’s issue, most of the development workflow also needs to override some values to the ApplicationSet’s generated application, and that’s not possible either.

What is the feature to solve this?

With ArgoCD v2.9, we are now allowed to temporarily toggle off the auto-sync of the applications generated from the ApplicationSet.

What we need to do is to only add this chunk of configuration to our ApplicationSet.

You can now disable the auto-sync in the application without it being reverted from the ApplicationSet controller.

Actually, as part of the change, you can ignore the difference between several parameters not only limited to the syncPolicy to match your needs. Note that there are still some limitations to this especially if the field that we want to override is a list. However, I am now able to disable the auto-sync of the application in a specific place from time to time when it’s needed.

--

--