### Create Namespace and Apply Installation Manifest Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation Use these commands to create a dedicated namespace for the image updater and apply the main installation manifest. ```bash kubectl create namespace kubectl apply -n -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/config/install.yaml ``` -------------------------------- ### Install semver CLI Source: https://argocd-image-updater.readthedocs.io/en/stable/contributing/releasing Installs the semver CLI tool using Go. Ensure GoLang is installed and configured in your PATH. ```bash go install github.com/davidrjonas/semver-cli@latest ``` -------------------------------- ### Full Example with Application Override and Helm Values Write-Back Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-methods A comprehensive example demonstrating per-application overrides for write-back configuration, including updating Helm values files. This allows granular control over how updates are applied to specific applications. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: my-image-updater namespace: argocd spec: writeBackConfig: method: "git:secret:argocd/git-creds" gitConfig: repository: "https://github.com/example/example.git" branch: "main" pullRequest: github: {} applicationRefs: - namePattern: "my-app" images: - alias: "nginx" imageName: "nginx:1.17.10" writeBackConfig: method: "git:secret:argocd/git-creds" gitConfig: branch: "main" writeBackTarget: "helmvalues:/helm/config/values.yaml" ``` -------------------------------- ### Complete Argo CD Image Updater Configuration Example Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications A comprehensive example demonstrating various configuration options including global defaults, application-specific overrides for update strategy and write-back method, and image-specific settings. This configuration precisely targets applications using name patterns and label selectors. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: production-updater namespace: argocd spec: commonUpdateSettings: updateStrategy: "semver" forceUpdate: false allowTags: "regexp:^v[0-9]+\.[0-9]+\.[0-9]+$" ignoreTags: [ "latest", "dev", "test" ] writeBackConfig: method: "argocd" applicationRefs: - namePattern: "frontend-*" labelSelectors: matchLabels: environment: "production" commonUpdateSettings: updateStrategy: "latest" forceUpdate: true writeBackConfig: method: "git" gitConfig: repository: "git@github.com:myorg/frontend-config.git" branch: "main" writeBackTarget: "helmvalues:/values.yaml" images: - alias: "frontend" imageName: "myregistry/frontend:v1.0" commonUpdateSettings: allowTags: "regexp:^v[0-9]+\.[0-9]+\.[0-9]+-prod$" - alias: "nginx" imageName: "nginx:1.20" - namePattern: "backend" images: - alias: "api" imageName: "myregistry/backend:v2.0" commonUpdateSettings: updateStrategy: "digest" - alias: "database" imageName: "postgres:13" ``` -------------------------------- ### Combine Name Patterns and Label Selectors Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Combine `namePattern` and `labelSelectors` for precise application selection. This example selects applications starting with 'web-' that also have the label 'tier: frontend'. ```yaml spec: applicationRefs: - namePattern: "web-*" labelSelectors: matchLabels: tier: "frontend" images: - alias: "webapp" imageName: "myregistry/webapp:latest" ``` -------------------------------- ### Grafana Dashboard Example Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation A rudimentary example dashboard definition for Grafana is provided. ```json { "__inputs": [ { "name": "DS_ARGOCD_IMAGE_UPDATER", "label": "Argo CD Image Updater", "includeAll": true, "multi": false, "options": [], "query": "", "refresh": 1, "regex": "", "type": "datasource" } ], "__requires": [ { "type": "grafana", "id": "grafana", "name": "Grafana", "version": "" }, { "type": "datasource", "id": "prometheus", "name": "Prometheus", "version": "" } ], "annotations": { "list": [ { "builtIn": 1, "datasource": { "type": "grafana", "uid": "__annotation-வுகள்" }, "enable": true, "hide": true, "iconiduría": "info", "name": "Annotations & Alerts", "type": "dashboard" } ] }, "editable": true, "fiscalYearStartMonth": 1, "graphTooltip": 0, "id": null, "links": [], "liveNow": false, "panels": [ { "datasource": { "type": "prometheus", "uid": "${DS_ARGOCD_IMAGE_UPDATER}" }, "fieldConfig": { "defaults": { "color": { "mode": "thresholds" }, "custom": { "axisCenteredZero": false, "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, "drawStyle": "line", "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { "type": "linear" }, "showPoints": "auto", "spanNulls": false, "stacking": { "group": "A", "mode": "none" }, "thresholds": { "mode": "absolute", "steps": [ { "color": "#2f9b0f", "value": null }, { "color": "#e5ac0e", "value": 80 }, { "color": "#d44a4a", "value": 100 } ] }, "tooltip": { "mode": "single", "sort": "none" }, "transformations": [], "unit": "short" }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { "color": "#2f9b0f", "value": null }, { "color": "#e5ac0e", "value": 80 }, { "color": "#d44a4a", "value": 100 } ] } }, "overrides": [ { "matcher": { "id": "byRegexp", "options": { "regexp": "^Applications watched" } }, "properties": [ { "id": "custom.axisPlacement", "value": "left" }, { "id": "custom.width", "value": 2 } ] }, { "matcher": { "id": "byRegexp", "options": { "regexp": "^Images watched" } }, "properties": [ { "id": "custom.axisPlacement", "value": "left" }, { "id": "custom.width", "value": 2 } ] }, { "matcher": { "id": "byRegexp", "options": { "regexp": "^Images updated" } }, "properties": [ { "id": "custom.axisPlacement", "value": "right" }, { "id": "custom.width", "value": 2 } ] }, { "matcher": { "id": "byRegexp", "options": { "regexp": "^Images errors" } }, "properties": [ { "id": "custom.axisPlacement", "value": "right" }, { "id": "custom.width", "value": 2 } ] } ] }, "gridPos": { "h": 10, "w": 24, "x": 0, "y": 0 }, "id": 1, "options": { "legend": { "calcs": [], "displayMode": "list", "placement": "bottom", "showLegend": true }, "tooltip": { "mode": "single", "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", "uid": "${DS_ARGOCD_IMAGE_UPDATER}" }, "editorMode": "builder", "expr": "sum(rate(argocd_image_updater_applications_watched_total[5m])) by (image_updater_cr_name, image_updater_cr_namespace)", "legendFormat": "Applications watched {{image_updater_cr_name}}", "range": true, "refId": "A" }, { "datasource": { "type": "prometheus", "uid": "${DS_ARGOCD_IMAGE_UPDATER}" }, "editorMode": "builder", "expr": "sum(rate(argocd_image_updater_images_watched_total[5m])) by (image_updater_cr_name, image_updater_cr_namespace)", "legendFormat": "Images watched {{image_updater_cr_name}}", "range": true, "refId": "B" }, { "datasource": { "type": "prometheus", "uid": "${DS_ARGOCD_IMAGE_UPDATER}" }, "editorMode": "builder", "expr": "sum(rate(argocd_image_updater_images_updated_total[5m])) by (image_updater_cr_name, image_updater_cr_namespace)", "legendFormat": "Images updated {{image_updater_cr_name}}", "range": true, "refId": "C" }, { "datasource": { "type": "prometheus", "uid": "${DS_ARGOCD_IMAGE_UPDATER}" }, "editorMode": "builder", "expr": "sum(rate(argocd_image_updater_images_errors_total[5m])) by (image_updater_cr_name, image_updater_cr_namespace)", "legendFormat": "Images errors {{image_updater_cr_name}}", "range": true, "refId": "D" } ], "title": "Image Updater Metrics", "type": "timeseries" } ], "schemaVersion": 10, "style": "dark", "tags": [], "templating": { "list": [ { "current": { "selected": false, "text": "Prometheus", "value": "Prometheus" }, "hide": 0, "includeAll": false, "label": "", "multi": false, "name": "DS_ARGOCD_IMAGE_UPDATER", "options": [], "query": "prometheus", "refresh": 1, "regex": "", "skipUrlSync": false, "type": "datasource" } ] }, "time": { "from": "now-1h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Argo CD Image Updater Dashboard", "uid": "argocd-image-updater-dashboard", "version": 1, "weekStart": "" } ``` -------------------------------- ### Install Argo CD Image Updater into Argo CD Namespace Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation Installs the controller into the `argocd` namespace using the default manifests. This is the recommended approach for simplicity and covers the default namespace-scoped watch. ```bash kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/config/install.yaml ``` -------------------------------- ### Before: Annotation-based Application Configuration Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Example of an Argo CD Application configured with legacy annotations for image updating. ```yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app annotations: argocd-image-updater.argoproj.io/image-list: nginx=nginx:1.20 argocd-image-updater.argoproj.io/nginx.update-strategy: semver argocd-image-updater.argoproj.io/nginx.allow-tags: regexp:^[0-9]+\.[0-9]+$ ``` -------------------------------- ### Test Image for Specific Platform (Results Found) Source: https://argocd-image-updater.readthedocs.io/en/stable/install/testing This example demonstrates testing an image against the 'linux/amd64' platform, successfully finding newer versions of the image. ```bash $ argocd-image-updater test quay.io/argoprojlabs/argocd-e2e-container --platforms linux/amd64 --update-strategy newest-build --loglevel debug INFO[0000] retrieving information about image command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0000] setting rate limit to 20 requests per second command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io prefix=quay.io registry="https://quay.io" DEBU[0000] Inferred registry from prefix quay.io to use API https://quay.io command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0000] Fetching available tags and metadata from registry command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0002] Found 3 tags in registry command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] found 3 from 3 tags eligible for consideration command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0002] latest image according to constraint is quay.io/argoprojlabs/argocd-e2e-container:0.3 command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io ``` -------------------------------- ### Example Script for Generating Credentials Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/authentication A simple shell script that outputs a username and password pair to standard output for registry authentication. ```bash #!/bin/sh echo "someuser:s0mep4ssw0rd" ``` -------------------------------- ### Set Environment Variable with Credentials Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/authentication Example of how to set an environment variable with username and password for registry authentication. ```bash DOCKER_HUB_CREDS=someuser:s0m3p4ssw0rd ``` -------------------------------- ### Complete ImageUpdater Example with Specificity Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Demonstrates an ImageUpdater resource with multiple application references, showcasing specificity rules for name patterns to manage different application sets. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: my-image-updater namespace: argocd spec: applicationRefs: # This will be used for app-1 (most specific - exact match) - namePattern: "app-1" images: - alias: "test1" imageName: "test:1.1.0" # This will be used for app-prod-* applications (more specific than app-*) - namePattern: "app-prod-*" images: - alias: "nginx" imageName: "nginx:1.20" # This will be used for other app-* applications (least specific) - namePattern: "app-*" images: - alias: "redis" imageName: "redis:6.2" ``` -------------------------------- ### Install Argo CD Image Updater Controller Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation Installs the Argo CD Image Updater controller using the provided YAML manifest. This is the initial step for deployment. ```bash kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/config/install.yaml ``` -------------------------------- ### Example Reference to a Generic Secret Field Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/authentication This example shows how to reference credentials stored in the `creds` field of a secret named `some-secret` within the `argocd` namespace. ```text secret:argocd/some-secret#creds ``` -------------------------------- ### Example ImageUpdater Status Output Source: https://argocd-image-updater.readthedocs.io/en/stable/examples An example of the status output for an Argo CD Image Updater resource, showing observed generation, timestamps, counts of matched applications and managed images, recent updates, and conditions. ```yaml status: observedGeneration: 3 lastCheckedAt: "2026-03-02T22:10:00Z" lastUpdatedAt: "2026-03-02T22:12:35Z" applicationsMatched: 2 imagesManaged: 3 recentUpdates: - alias: "nginx" image: "nginx:1.20" newVersion: "1.21.0" applicationsUpdated: 2 updatedAt: "2026-03-02T22:12:35Z" message: "Updated to latest semver version." conditions: - type: "Ready" status: "True" reason: "ReconcileSucceeded" message: "Reconciled 2 applications, 1 images updated." - type: "Reconciling" status: "False" reason: "Idle" message: "Last check completed. Awaiting next cycle." - type: "Error" status: "False" reason: "NoErrors" message: "No errors during last reconciliation." ``` -------------------------------- ### Test Image for Specific Platform (No Results) Source: https://argocd-image-updater.readthedocs.io/en/stable/install/testing Use the `--platforms` option to specify target architectures. This example shows a test for the 'darwin/amd64' platform, which yields no results as expected for non-native images. ```bash $ argocd-image-updater test quay.io/argoprojlabs/argocd-e2e-container --platforms darwin/amd64 --update-strategy newest-build --loglevel debug INFO[0000] retrieving information about image command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0000] setting rate limit to 20 requests per second command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io prefix=quay.io registry="https://quay.io" DEBU[0000] Inferred registry from prefix quay.io to use API https://quay.io command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0000] Fetching available tags and metadata from registry command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] Manifest list did not contain any usable reference. Platforms requested: (darwin/amd64), platforms included: (linux/amd64,linux/arm64,linux/s390x,linux/ppc64le) command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] No metadata found for argoprojlabs/argocd-e2e-container:0.1 command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] Manifest list did not contain any usable reference. Platforms requested: (darwin/amd64), platforms included: (linux/amd64,linux/arm64,linux/s390x,linux/ppc64le) command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] No metadata found for argoprojlabs/argocd-e2e-container:0.2 command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] Manifest list did not contain any usable reference. Platforms requested: (darwin/amd64), platforms included: (linux/amd64,linux/arm64,linux/s390x,linux/ppc64le) command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io DEBU[0002] No metadata found for argoprojlabs/argocd-e2e-container:0.3 command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0002] Found 0 tags in registry command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io INFO[0002] no newer version of image found command=test image_name=quay.io/argoprojlabs/argocd-e2e-container image_registry=quay.io ``` -------------------------------- ### ImageUpdater status output example Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update This output shows the number of matched applications, managed images, the last check time, and the readiness status of an ImageUpdater resource. ```text NAME APPS IMAGES LAST CHECKED READY production-updater 7 3 2026-03-02T22:10:00Z True ``` -------------------------------- ### Example Prometheus Metrics Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation These are example metrics exposed by the Argo CD Image Updater. Gauges show the current state, while counters are cumulative. ```text # TYPE argocd_image_updater_applications_watched_total gauge argocd_image_updater_applications_watched_total{image_updater_cr_name="dev",image_updater_cr_namespace="argocd"} 1 argocd_image_updater_applications_watched_total{image_updater_cr_name="prod",image_updater_cr_namespace="argocd"} 2 # HELP argocd_image_updater_images_watched_total Number of images watched by Argo CD Image Updater CR # TYPE argocd_image_updater_images_watched_total gauge argocd_image_updater_images_watched_total{image_updater_cr_name="dev",image_updater_cr_namespace="argocd"} 2 argocd_image_updater_images_watched_total{image_updater_cr_name="prod",image_updater_cr_namespace="argocd"} 1 # HELP argocd_image_updater_images_updated_total Number of images updated by Argo CD Image Updater CR # TYPE argocd_image_updater_images_updated_total counter argocd_image_updater_images_updated_total{image_updater_cr_name="dev",image_updater_cr_namespace="argocd"} 2 argocd_image_updater_images_updated_total{image_updater_cr_name="prod",image_updater_cr_namespace="argocd"} 5 # HELP argocd_image_updater_images_errors_total Number of errors reported by Argo CD Image Updater CR # TYPE argocd_image_updater_images_errors_total counter argocd_image_updater_images_errors_total{image_updater_cr_name="dev",image_updater_cr_namespace="argocd"} 0 argocd_image_updater_images_errors_total{image_updater_cr_name="prod",image_updater_cr_namespace="argocd"} 0 ``` -------------------------------- ### Semver Version Constraint (Allowing Pre-releases) Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Example of configuring the semver strategy to allow updates to pre-release versions by appending '-0' to the version constraint. ```yaml images: - alias: "someImage" imageName: "some/image:2.x-0" ``` -------------------------------- ### Configure Semver Update Strategy with Version Constraints Source: https://argocd-image-updater.readthedocs.io/en/stable/examples This example demonstrates using the 'semver' update strategy for multiple images within an application. The controller will automatically push updates to a dynamically named branch and open a pull request. If an open PR for the same image pair already exists, it will be left untouched. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: prod-image-updater namespace: argocd spec: writeBackConfig: method: "argocd" applicationRefs: - namePattern: "prod" images: - alias: "api" imageName: "registry.com/vendor/api:1.x" commonUpdateSettings: updateStrategy: "semver" - alias: "front" imageName: "registry.com/vendor/front:1.x" commonUpdateSettings: updateStrategy: "semver" --- apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: - name: app image: registry.com/vendor/api:1.0 ``` -------------------------------- ### CloudEvents Payload Example Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/webhook An example of a CloudEvents v1.0 compliant payload generated by the EventBridge input transformer. ```json { "specversion": "1.0", "id": "", "type": "com.amazon.ecr.image.push", "source": "urn:aws:ecr:::repository/", "subject": ":", "time": "", "datacontenttype": "application/json", "data": { "repositoryName": "", "imageDigest": "sha256:ப்புகளை", "imageTag": "", "registryId": "" } } ``` -------------------------------- ### Select Applications by Labels Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Use `labelSelectors` to select applications based on Kubernetes labels. This example selects applications belonging to 'my-project' and having the 'environment' label set to 'production' or 'staging'. ```yaml spec: applicationRefs: - namePattern: "*" # Match all applications labelSelectors: matchLabels: app.kubernetes.io/part-of: "my-project" matchExpressions: - key: "environment" operator: In values: [ "production", "staging" ] images: - alias: "app" imageName: "myregistry/myapp:stable" ``` -------------------------------- ### After: CRD-based ImageUpdater Resource Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Example of a new ImageUpdater resource replacing application annotations for configuration. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: my-image-updater namespace: argocd spec: applicationRefs: - namePattern: "my-app" images: - alias: "nginx" imageName: "nginx:1.20" commonUpdateSettings: updateStrategy: "semver" allowTags: "regexp:^[0-9]+\.[0-9]+$" ``` -------------------------------- ### Before: Annotation-based Configuration Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Shows how to configure Argo CD Image Updater using annotations directly on Kubernetes Application resources. This method is suitable for simpler setups but can become verbose. ```yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: production-app annotations: argocd-image-updater.argoproj.io/image-list: nginx=nginx:1.20,redis=redis:6.2 argocd-image-updater.argoproj.io/write-back-method: git argocd-image-updater.argoproj.io/git-repository: git@github.com:myorg/myrepo.git argocd-image-updater.argoproj.io/git-branch: main argocd-image-updater.argoproj.io/write-back-target: helmvalues:./values.yaml argocd-image-updater.argoproj.io/update-strategy: semver argocd-image-updater.argoproj.io/nginx.allow-tags: regexp:^[0-9]+\.[0-9]+$ argocd-image-updater.argoproj.io/nginx.ignore-tags: latest,dev argocd-image-updater.argoproj.io/redis.update-strategy: latest argocd-image-updater.argoproj.io/redis.pull-secret: secret:my-namespace/redis-secret#username --- apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: staging-app annotations: argocd-image-updater.argoproj.io/write-back-method: git argocd-image-updater.argoproj.io/git-repository: git@github.com:myorg/myrepo.git argocd-image-updater.argoproj.io/git-branch: develop argocd-image-updater.argoproj.io/write-back-target: helmvalues:./values.yaml argocd-image-updater.argoproj.io/image-list: nginx=nginx:latest argocd-image-updater.argoproj.io/nginx.update-strategy: latest ``` -------------------------------- ### Get ImageUpdater resources Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update Use this command to quickly check the state of all your ImageUpdater resources in a specific namespace. ```bash kubectl get imageupdater -n argocd ``` -------------------------------- ### Configure Registries in YAML Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/registries Define multiple container registries with their specific configurations in a YAML file. This includes Docker Hub and RedHat Quay examples. ```yaml registries: - name: Docker Hub prefix: docker.io api_url: https://registry-1.docker.io credentials: secret:foo/bar#creds defaultns: library default: true - name: RedHat Quay api_url: https://quay.io prefix: quay.io insecure: yes credentials: env:REGISTRY_SECRET ``` -------------------------------- ### Semver Update Strategy Configuration Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Example of configuring the semver update strategy. Specifying 'semver' is optional as it's the default. The 'imageName' field can include a semver version constraint. ```yaml images: - alias: "someImage" imageName: "some/image[:]" commonUpdateSettings: # Specifying update-strategy is optional, because semver is the default updateStrategy: "semver" ``` -------------------------------- ### Kustomize Command Equivalent Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/images This demonstrates the equivalent kustomize command for updating an image specification. ```bash kustomize edit set image quay.io/argoproj/argocd=ghcr.io/argoproj/argocd ``` -------------------------------- ### Before: Write-Back Configurations Annotations Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotations for configuring Git write-back method, repository, branch, and target. ```yaml argocd-image-updater.argoproj.io/write-back-method: git argocd-image-updater.argoproj.io/git-repository: git@github.com:myorg/myrepo.git argocd-image-updater.argoproj.io/git-branch: main argocd-image-updater.argoproj.io/write-back-target: helmvalues:./values.yaml ``` -------------------------------- ### Application-Level Configuration Overrides Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Override global settings for specific applications. This example shows overriding `updateStrategy` and `forceUpdate` for 'production-*' applications. ```yaml spec: commonUpdateSettings: updateStrategy: "semver" applicationRefs: - namePattern: "production-*" commonUpdateSettings: updateStrategy: "latest" # Override for production apps forceUpdate: true images: - alias: "app" imageName: "myregistry/myapp:stable" - namePattern: "development-*" images: - alias: "app" imageName: "myregistry/myapp:dev" ``` -------------------------------- ### Test different update strategies Source: https://argocd-image-updater.readthedocs.io/en/stable/install/testing Test the outcome of various update strategies using the `--update-strategy` option. This allows you to preview which image would be selected based on different criteria like `newest-build` or `latest`. ```bash $ argocd-image-updater test ghcr.io/argoproj/argocd --update-strategy newest-build --loglevel info DEBU[0000] Creating in-cluster Kubernetes client INFO[0000] retrieving information about image image_alias= image_name=ghcr.io/argoproj/argocd registry_url=ghcr.io DEBU[0000] setting rate limit to 20 requests per second prefix=ghcr.io registry="https://ghcr.io" DEBU[0000] Inferred registry from prefix ghcr.io to use API https://ghcr.io INFO[0000] Fetching available tags and metadata from registry application=test image_alias= image_name=ghcr.io/argoproj/argocd registry_url=ghcr.io INFO[0139] Found 864 tags in registry application=test image_alias= image_name=ghcr.io/argoproj/argocd registry_url=ghcr.io DEBU[0139] found 864 from 864 tags eligible for consideration image=ghcr.io/argoproj/argocd INFO[0139] latest image according to constraint is ghcr.io/argoproj/argocd:2.4.0-f8390c94 application=test image_alias= image_name=ghcr.io/argoproj/argocd registry_url=ghcr.io ``` -------------------------------- ### Before: Kustomize Configuration Annotation Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotation for configuring Kustomize image name updates. ```yaml argocd-image-updater.argoproj.io/argocd.kustomize.image-name: quay.io/argoproj/argocd ``` -------------------------------- ### Before: Helm Configuration Annotations Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotations for configuring Helm image name and tag updates. ```yaml argocd-image-updater.argoproj.io/dex.helm.image-name: dex.image.name argocd-image-updater.argoproj.io/dex.helm.image-tag: dex.image.tag ``` -------------------------------- ### Basic `test` subcommand usage Source: https://argocd-image-updater.readthedocs.io/en/stable/install/testing Run the `test` subcommand with an image name to verify its behavior. This is the simplest form of testing. ```bash argocd-image-updater test ``` -------------------------------- ### Update Kustomization with Git Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-methods Specifies the Git write-back method to update a Kustomization in a Git repository. Use absolute paths starting with '/' for the writeBackTarget. ```yaml spec: writeBackConfig: method: "git" gitConfig: # absolute paths start with / writeBackTarget: "kustomization:/config/overlays/bar" ``` -------------------------------- ### Reference a Created Pull Secret Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/authentication After creating a pull secret, reference it using this format. This example assumes the secret was created in the `argocd` namespace with the name `dockerhub-secret`. ```text pullsecret:argocd/dockerhub-secret ``` -------------------------------- ### Before: Basic Image List Annotation Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotation for specifying a list of images to be updated. ```yaml argocd-image-updater.argoproj.io/image-list: nginx=nginx:1.20,redis=redis:6.2 ``` -------------------------------- ### Semver Version Constraint (Minor Release) Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Example of using a semver version constraint to allow updates to any minor release within a major version (e.g., 1.x). ```yaml images: - alias: "someImage" imageName: "some/image:1.x" ``` -------------------------------- ### Before: Platform Specifications Annotation Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotation for specifying allowed platforms for an image. ```yaml argocd-image-updater.argoproj.io/nginx.platforms: linux/amd64,linux/arm64 ``` -------------------------------- ### Before: Update Strategy Annotations Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/migration Legacy annotations for defining update strategies for specific images. ```yaml argocd-image-updater.argoproj.io/nginx.update-strategy: semver argocd-image-updater.argoproj.io/redis.update-strategy: latest ``` -------------------------------- ### Get ImageUpdater Resource Status (kubectl) Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Retrieve the status of an ImageUpdater resource in Argo CD using kubectl. This command provides a quick overview of managed applications and images. ```bash kubectl get imageupdater -n argocd ``` -------------------------------- ### Configure Webhook Deployment and ConfigMap (Webhook Command) Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/webhook Update the `argocd-image-updater` Deployment to use the 'webhook' command. Optionally, configure the webhook port in the `argocd-image-updater-config` ConfigMap. ```yaml # argocd-image-updater Deployment, container args need to be changed to webhook spec: template: spec: containers: - args: - webhook --- # (OPTIONAL) argocd-image-updater-config ConfigMap, edit to change the webhook server port data: webhook.port: ``` -------------------------------- ### Enable Webhook Server with Webhook Command Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/webhook Run the webhook server independently of polling. The default port is 8080. ```bash argocd-image-updater webhook --webhook-port [PORT] ``` -------------------------------- ### Configure 'alphabetical' strategy with tag filtering Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Use the 'alphabetical' strategy with 'allowTags' to restrict updates to tags matching a specific regular expression. This example only considers tags in 'YYYY-MM-DD' format. ```yaml images: - alias: "myimage" imageName: "some/image" commonUpdateSettings: updateStrategy: "alphabetical" allowTags: "regexp:^[0-9]{4}-[0-9]{2}-[0-9]{2}$" ``` -------------------------------- ### Configure Controller ConfigMap Settings Source: https://argocd-image-updater.readthedocs.io/en/stable/install/installation Alternatively, configure the argocd.namespace and watch.namespaces settings in the argocd-image-updater-config ConfigMap to specify Argo CD's location and namespaces to watch. ```yaml data: argocd.namespace: "" watch.namespaces: "," ``` -------------------------------- ### digest Strategy with Mutable Tag Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Example of using the 'digest' strategy to continuously follow a mutable tag like 'latest'. The image will update whenever a new push occurs for the specified tag. ```yaml images: - alias: "myimage" imageName: "some/image:latest" commonUpdateSettings: updateStrategy: "digest" ``` -------------------------------- ### ImageUpdater with Digest Strategy and Argo CD Write-Back Source: https://argocd-image-updater.readthedocs.io/en/stable/examples Uses the 'digest' update strategy for tracking mutable tags and configures write-back to Argo CD. Includes an example Deployment manifest for context. ```yaml apiVersion: argocd-image-updater.argoproj.io/v1alpha1 kind: ImageUpdater metadata: name: dev-image-updater namespace: argocd spec: commonUpdateSettings: updateStrategy: "digest" writeBackConfig: method: "argocd" applicationRefs: - namePattern: "dev" images: - alias: "api" imageName: "registry.com/vendor/api:latest" - alias: "front" imageName: "registry.com/vendor/front:latest" --- apiVersion: apps/v1 kind: Deployment spec: template: spec: containers: - name: app image: registry.com/vendor/api@sha256:38089... # Initial sha ``` -------------------------------- ### Fish shell completion - Load current session Source: https://argocd-image-updater.readthedocs.io/en/stable/install/cmd/completion To load completions in your current Fish shell session, pipe the output of the completion command to the source command. ```fish argocd-image-updater completion fish | source ``` -------------------------------- ### Semver Version Constraint (Patch Release) Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies Example of using a semver version constraint to allow updates to the latest patch release within a specific minor version branch (e.g., 1.2.x). ```yaml images: - alias: "someImage" imageName: "some/image:1.2.x" ``` -------------------------------- ### Test registry access and find latest version Source: https://argocd-image-updater.readthedocs.io/en/stable/install/testing Use the `test` command with the `--loglevel info` flag to observe detailed logs when checking for the latest version of an image on a registry, such as Docker Hub. This helps in understanding how semantic versioning is applied. ```bash $ argocd-image-updater test nginx --loglevel info INFO[0000] retrieving information about image command=test image_name=nginx image_registry= INFO[0000] Fetching available tags and metadata from registry command=test image_name=nginx image_registry= INFO[0002] Found 923 tags in registry command=test image_name=nginx image_registry= INFO[0002] latest image according to constraint is nginx:1.29.1 command=test image_name=nginx image_registry= ``` -------------------------------- ### Test image update with pattern matching and newest-build strategy Source: https://argocd-image-updater.readthedocs.io/en/stable/install/cmd/test Find the latest built image for a tag that matches a specific regular expression pattern, using the 'newest-build' update strategy. ```bash argocd-image-updater test nginx --allow-tags '^1.19.\d+(\-.*)*$' --update-strategy newest-build ``` -------------------------------- ### Checking ImageUpdater Status with kubectl Source: https://argocd-image-updater.readthedocs.io/en/stable/examples Provides kubectl commands to check the status of ImageUpdater resources, including overview, detailed JSON output, conditions, and recent updates. Assumes jq is installed for JSON parsing. ```bash # Quick overview of all ImageUpdater resources kubectl get imageupdater -n argocd # Detailed status for a specific resource kubectl get imageupdater production-updater -n argocd -o jsonpath='{.status}' | jq . # Check conditions kubectl get imageupdater production-updater -n argocd -o jsonpath='{.status.conditions}' | jq . # Check recent image updates kubectl get imageupdater production-updater -n argocd -o jsonpath='{.status.recentUpdates}' | jq . ``` -------------------------------- ### Get Full ImageUpdater Resource Status (kubectl -o yaml) Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications Obtain the complete status details of a specific ImageUpdater resource in YAML format using kubectl. This provides in-depth information about the observed state and recent activities. ```bash kubectl get imageupdater production-updater -n argocd -o yaml ``` -------------------------------- ### Reference External Script for Credentials Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/authentication Use an external script to generate credentials. The script must output ':' to stdout and be executable. ```plaintext ext: ``` ```plaintext ext:/usr/local/bin/creds.sh ``` -------------------------------- ### Example Argo CD Image Updater Status Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/applications This YAML structure represents the status of the Argo CD Image Updater, showing observed generation, last check/update times, image statistics, recent update details, and Kubernetes conditions. ```yaml status: observedGeneration: 5 lastCheckedAt: "2026-03-02T22:10:00Z" lastUpdatedAt: "2026-03-02T22:12:35Z" applicationsMatched: 7 imagesManaged: 3 recentUpdates: - alias: "frontend-image" image: "myregistry.com/myorg/frontend:v1.2.3" newVersion: "v1.2.4" applicationsUpdated: 2 updatedAt: "2026-03-02T22:12:35Z" message: "Updated to latest patch via semver." conditions: - type: "Ready" status: "True" lastTransitionTime: "2026-03-02T22:10:00Z" reason: "ReconcileSucceeded" message: "Reconciled 7 applications, 2 images updated." - type: "Reconciling" status: "False" lastTransitionTime: "2026-03-02T22:10:00Z" reason: "Idle" message: "Last check completed. Awaiting next cycle." - type: "Error" status: "False" lastTransitionTime: "2026-03-02T22:10:00Z" reason: "NoErrors" message: "No errors during last reconciliation." ``` -------------------------------- ### Create Release Branch Source: https://argocd-image-updater.readthedocs.io/en/stable/contributing/releasing Clones the repository, checks out a new release branch, and pushes it to the remote. Replace 'release-0.13' with the next semantic version and 'origin' with your upstream remote name. ```bash git clone git@github.com:argoproj-labs/argocd-image-updater.git git checkout -b release-0.13 git push origin release-0.13 ``` -------------------------------- ### Detailed Git Commit Message Template with OCI Labels Source: https://argocd-image-updater.readthedocs.io/en/stable/basics/update-methods Enhance commit messages by including OCI image labels like Git repository URL and commit SHA. This template example demonstrates how to access and use these labels within the commit message. ```yaml data: git.commit-message-template: | build: Automatic update of {{ .AppName }} {{ range .AppChanges -}} updates image {{ .Image }} tag '{{ .OldTag }}' to '{{ .NewTag }}' {{- if index .Labels "org.opencontainers.image.revision" }} {{- $source := index .Labels "org.opencontainers.image.source" }} {{- $revision := index .Labels "org.opencontainers.image.revision" }} Upstream Commit: {{ $source }}/commit/{{ $revision }} {{ end }} {{ end -}} ``` -------------------------------- ### Deploy Latest Build with Specific Tag Pattern Source: https://argocd-image-updater.readthedocs.io/en/stable/configuration/images Use the `latest` update strategy and `commonUpdateSettings.allowTags` with a regular expression to deploy the latest build that matches a specific tag pattern. ```yaml images: - alias: "yourtool" imageName: "yourorg/yourimage" commonUpdateSettings: updateStrategy: "latest" allowTags: "regexp:^v1.0.0-[0-9a-zA-Z]+$" ```