Argocd image updater doesn't update images - pending spec update

Jotting down some notes about argocd image updater that maybe someone has use for in the future

Published 11. July 2025

I am generally not a fan of argocd image updater as I don't like automatic deployments. However, in situations where you are too busy to manage gitops on top of writing software and kubernetes manifests (which has taken up too many evenings for me, personally), it's nice to know that building a docker image is generally all you need to get it deployed. Once you are employed, the different in amount of time and effort you can dedicated to work vs hobby changes drastically and isn't as dynamic as when you are a university student, after all.

Here's the setup: I have a Kubernetes cluster running argocd, where all manifests are stored in a git repo. Especially when you don't touch the manifests for half a year at a time, it's nice to have full history of what you did and what's currently running. The argocd applications are also stored in the same git repo. Each application generally has autosync enabled, because with hobby deployments, reducing the number of steps you have to take when maintaining really matters - at least to me. I don't use Helm for personal deployments, kustomize fills most of my needs and frankly every time I have to deal with Helm charts it's a bad time. A few Appliances do get installed and managed with Helm, but the most I do there is slap the chart URL into argocd and provide values.

I've been struggling with argocd image updater not updating my images in some applications for a while. It's all been development applications, so I never really cared that much, but it was beginning to cause irritation. The symptom was this:

time="2025-07-11T12:43:15Z" level=info msg="Successfully updated image 'xxx' to 'xxx', but pending spec update (dry run=false)" alias=xxx application=xxx image_name=xxx image_tag=1.0.11 registry=xxx

Or at least, when you look through logs in a halfassed manner, half a year since you set up the service, this quickly becomes the most obvious thing that sticks out. However, reading the source code you will quickly get a different impression. This is a completely standard and benign message and is unrelated to any bug. I will tell you immediately that the message appears under normal operation. If you as a reader get anything out of this post, it should be that you are looking in the wrong place if you are troubleshooting based on this message.

Instead, thinking a bit more, it turned out the problem wasn't any specific log line, but rather the lack of log lines - it was updating docker images, but never committing changes to the gitops repo. A quick check revealed I had at some point in time(probably while copypasting around some annotations), removed the writeback method config. The default, argocd - basically patches Applications in-cluster, as you can read about in the docs. For some reason this worked poorly with my current setup. I could see that the argocd applications were mutated by the image updater, but it didn't result in images being updated.

The fix was trivial. I want image updates to be persisted to git, so simply re-enabling writeback to git fixed all my issues.