From 0ed5299cca6fd41a86564643c8c129bf36dcf98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Jeanneret?= Date: Thu, 23 Jul 2026 14:55:16 +0200 Subject: [PATCH 1/2] Update rhoso-gitops docs for automated sync and dedicated namespace Child applications now use automated sync with a retry policy by default. Document the targetRevision stability warning, add a section for disabling automated sync, and update the apps table with a Sync column. Update all namespace references from openshift-gitops to rhoso-gitops-standalone to reflect the dedicated ArgoCD instance. Co-Authored-By: Claude Opus 4.6 --- .../rhoso-gitops/troubleshooting.adoc | 8 +-- modules/rhoso-gitops/rhoso-gitops-about.adoc | 2 +- .../rhoso-gitops-architecture.adoc | 16 +++-- .../rhoso-gitops-configuration.adoc | 68 +++++++++++++++++-- .../rhoso-gitops/rhoso-gitops-deploying.adoc | 4 +- 5 files changed, 80 insertions(+), 18 deletions(-) diff --git a/content/patterns/rhoso-gitops/troubleshooting.adoc b/content/patterns/rhoso-gitops/troubleshooting.adoc index 6789b2106..0e75f04c2 100644 --- a/content/patterns/rhoso-gitops/troubleshooting.adoc +++ b/content/patterns/rhoso-gitops/troubleshooting.adoc @@ -53,21 +53,21 @@ The pattern uses two Argo CD namespaces. List applications in each namespace: $ oc get applications -n vp-gitops ---- -. List applications in `openshift-gitops`: +. List applications in `rhoso-gitops-standalone`: + [source,terminal] ---- -$ oc get applications -n openshift-gitops +$ oc get applications -n rhoso-gitops-standalone ---- . Inspect a child application that is out of sync or unhealthy: + [source,terminal] ---- -$ oc describe application -n openshift-gitops +$ oc describe application -n rhoso-gitops-standalone ---- -Use the Argo CD UI in the `openshift-gitops` namespace to review sync waves, +Use the Argo CD UI in the `rhoso-gitops-standalone` namespace to review sync waves, resource health, and diff details for upstream overlays. [id="rhoso-gitops-check-pods"] diff --git a/modules/rhoso-gitops/rhoso-gitops-about.adoc b/modules/rhoso-gitops/rhoso-gitops-about.adoc index 8aadf3c77..d712aa187 100644 --- a/modules/rhoso-gitops/rhoso-gitops-about.adoc +++ b/modules/rhoso-gitops/rhoso-gitops-about.adoc @@ -52,7 +52,7 @@ fan-out. | Yes | {solution-name-upstream} clustergroup (`values-standalone.yaml`), *rhoso-gitops* meta-chart, and child {rh-rhoso-short} Applications in - `openshift-gitops` + `rhoso-gitops-standalone` | Managed clusters | None diff --git a/modules/rhoso-gitops/rhoso-gitops-architecture.adoc b/modules/rhoso-gitops/rhoso-gitops-architecture.adoc index 81ee4e9dc..42ac2494e 100644 --- a/modules/rhoso-gitops/rhoso-gitops-architecture.adoc +++ b/modules/rhoso-gitops/rhoso-gitops-architecture.adoc @@ -23,8 +23,8 @@ The delivery path is: . The {validated-patterns-op} reconciles the pattern clustergroup . The parent *rhoso-gitops* Application runs in `vp-gitops` ({solution-name-upstream} GitOps) -. The meta-chart renders child Applications in `openshift-gitops` - ({gitops-title}) +. The meta-chart renders child Applications in `rhoso-gitops-standalone` + (dedicated Argo CD instance) . The child apps sync upstream `example/*` overlays in order (Operators, networks, control plane, data plane) @@ -32,7 +32,7 @@ The delivery path is: image::rhoso-gitops/rhoso-gitops-applications.svg[{rhoso-gitops-pattern} GitOps application delivery,700] The diagram shows the parent Application in `vp-gitops`, child Applications in -`openshift-gitops`, and the upstream Kustomize overlays they sync. Sync-wave +`rhoso-gitops-standalone`, and the upstream Kustomize overlays they sync. Sync-wave annotations order deployment from infrastructure Operators through the data plane. @@ -43,8 +43,9 @@ The pattern uses two Argo CD namespaces: * The {validated-patterns-op} deploys the parent *rhoso-gitops* Application into *`vp-gitops`* ({solution-name-upstream} GitOps). -* The meta-chart creates child {rh-rhoso-short} Applications in - *`openshift-gitops`* ({gitops-title} Operator), per the chart defaults. +* Child {rh-rhoso-short} Applications are created in *`rhoso-gitops-standalone`*, + a dedicated Argo CD instance managed by the pattern (see `applicationNamespace` + in the chart). [id="rhoso-gitops-infrastructure-topology"] == Infrastructure topology @@ -68,7 +69,8 @@ image::rhoso-gitops/rhoso-gitops-infrastructure.svg[{rhoso-gitops-pattern} infra == Application sync order Child Applications deploy in sync-wave order when Argo CD reconciles the parent -*rhoso-gitops* Application: +*rhoso-gitops* Application. All applications use automated sync with a retry +policy by default. [cols="2,3,1",options="header"] |=== @@ -104,4 +106,4 @@ Child Applications deploy in sync-wave order when Argo CD reconciles the parent |=== After you change overrides, confirm child apps in the Argo CD UI or with -`oc get applications -n openshift-gitops`. +`oc get applications -n rhoso-gitops-standalone`. diff --git a/modules/rhoso-gitops/rhoso-gitops-configuration.adoc b/modules/rhoso-gitops/rhoso-gitops-configuration.adoc index 32263837b..0ff99260b 100644 --- a/modules/rhoso-gitops/rhoso-gitops-configuration.adoc +++ b/modules/rhoso-gitops/rhoso-gitops-configuration.adoc @@ -53,39 +53,49 @@ link:https://github.com/openstack-k8s-operators/gitops[openstack-k8s-operators/g at the revision pinned in `overrides/values-rhoso-gitops.yaml`. .Default upstream applications -[cols="2,2,1",options="header"] +[cols="2,2,1,1",options="header"] |=== -| Argo CD application | Upstream path | Enabled +| Argo CD application | Upstream path | Enabled | Sync | `operator-dependencies` | `example/dependencies` | Yes +| Automated | `openstack-operator` | `example/openstack-operator` | Yes +| Automated | `openstack-operator-cr` | `example/openstack-operator-cr` | Yes +| Automated | `openstack-secrets` | not configured (`path: TODO`) | No +| Automated | `openstack-networks` | `example/openstack-networks` | Yes +| Automated | `openstack-controlplane` | `example/openstack-controlplane` | Yes +| Automated | `openstack-dataplane` | `example/openstack-dataplane` | Yes +| Automated |=== +All applications include a default retry policy to handle transient failures +during deployment convergence. + For product, framework, upstream Git, and Operator versions, see the pattern repository link:https://github.com/validatedpatterns-sandbox/rhoso-gitops/blob/main/VERSIONS.md[VERSIONS.md] @@ -94,6 +104,16 @@ file. [id="rhoso-gitops-pin-revision"] == Pinning a different upstream revision +Child applications use *automated sync* by default: Argo CD reconciles them +whenever the upstream Git repository changes. If `targetRevision` points to a +branch name like `main` or `HEAD`, any push to that branch triggers an automatic +deployment, which can cause unexpected changes in production. + +[IMPORTANT] +==== +Always pin `targetRevision` to a *tag* or *commit hash* for stability. +==== + In `overrides/values-rhoso-gitops.yaml`, set `targetRevision` for each application that you want to pin: @@ -101,14 +121,29 @@ application that you want to pin: ---- applications: openstack-operator: - targetRevision: "v0.2.0" + targetRevision: "v0.2.0" # tag — recommended openstack-controlplane: - targetRevision: "v0.2.0" + targetRevision: "abc123def456" # commit hash — also safe ---- Apply the same key under every application you want on that revision, or only the entries that you want to change; unspecified keys keep chart defaults. +[id="rhoso-gitops-disable-automated-sync"] +== Disabling automated sync for an application + +To switch a specific application to manual sync, override its `syncPolicy` +without the `automated` key: + +[source,yaml] +---- +applications: + openstack-dataplane: + syncPolicy: + syncOptions: + - Prune=true +---- + [id="rhoso-gitops-disable-stage"] == Disabling a deployment stage @@ -121,6 +156,31 @@ applications: enabled: false ---- +[id="rhoso-gitops-custom-retry"] +== Setting a custom retry policy + +To override the default retry policy for an application: + +[source,yaml] +---- +applications: + openstack-controlplane: + syncPolicy: + automated: + prune: true + selfHeal: true + retry: + limit: 20 + backoff: + duration: "10s" + factor: 2 + maxDuration: "5m" +---- + +Refer to the Argo CD +link:https://argo-cd.readthedocs.io/en/stable/user-guide/auto_sync/#automatic-sync-semantics[automatic sync documentation] +for available retry options. + [id="rhoso-gitops-repoint-overlay"] == Pointing an application to your Git overlay diff --git a/modules/rhoso-gitops/rhoso-gitops-deploying.adoc b/modules/rhoso-gitops/rhoso-gitops-deploying.adoc index 8faf0f4a2..8f39d8985 100644 --- a/modules/rhoso-gitops/rhoso-gitops-deploying.adoc +++ b/modules/rhoso-gitops/rhoso-gitops-deploying.adoc @@ -91,11 +91,11 @@ $ ./pattern.sh make install $ oc get applications -n vp-gitops ---- -. List Argo CD applications in `openshift-gitops`: +. List Argo CD applications in `rhoso-gitops-standalone`: + [source,terminal] ---- -$ oc get applications -n openshift-gitops +$ oc get applications -n rhoso-gitops-standalone ---- . After install, run the pattern health check: From abc8e464b604744d8f9a60e0a806c72881195c1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Jeanneret?= Date: Fri, 24 Jul 2026 11:07:30 +0200 Subject: [PATCH 2/2] Remove application level sync-waves After testings, it seems we don't need to set sync-waves at the application level. This allows to be closer to Validated Patterns "eventually converging" practices. Depends-On: https://github.com/validatedpatterns-sandbox/rhoso-gitops/pull/17 --- .../rhoso-gitops/troubleshooting.adoc | 7 ++-- .../rhoso-gitops-architecture.adoc | 36 ++++++++----------- .../rhoso-gitops-applications.svg | 26 +++++++------- 3 files changed, 32 insertions(+), 37 deletions(-) diff --git a/content/patterns/rhoso-gitops/troubleshooting.adoc b/content/patterns/rhoso-gitops/troubleshooting.adoc index 0e75f04c2..ef553201e 100644 --- a/content/patterns/rhoso-gitops/troubleshooting.adoc +++ b/content/patterns/rhoso-gitops/troubleshooting.adoc @@ -67,8 +67,8 @@ $ oc get applications -n rhoso-gitops-standalone $ oc describe application -n rhoso-gitops-standalone ---- -Use the Argo CD UI in the `rhoso-gitops-standalone` namespace to review sync waves, -resource health, and diff details for upstream overlays. +Use the Argo CD UI in the `rhoso-gitops-standalone` namespace to review +application status, resource health, and diff details for upstream overlays. [id="rhoso-gitops-check-pods"] == Checking pod status @@ -103,7 +103,8 @@ The following known issues can affect pattern deployment: link:https://github.com/openstack-k8s-operators/gitops[openstack-k8s-operators/gitops]. * *Operator install delays*: Infrastructure Operators in `operator-dependencies` subscribe from the cluster catalog; allow time for OLM to resolve - `ClusterServiceVersions` (CSVs) before later sync waves run. + `ClusterServiceVersions` (CSVs). Other applications retry automatically + until their dependencies are satisfied. For community support, open an issue in the link:https://github.com/validatedpatterns-sandbox/rhoso-gitops/issues[pattern repository]. diff --git a/modules/rhoso-gitops/rhoso-gitops-architecture.adoc b/modules/rhoso-gitops/rhoso-gitops-architecture.adoc index 42ac2494e..3db19989d 100644 --- a/modules/rhoso-gitops/rhoso-gitops-architecture.adoc +++ b/modules/rhoso-gitops/rhoso-gitops-architecture.adoc @@ -7,7 +7,7 @@ The {rhoso-gitops-pattern} delivers {rh-rhoso-short} configuration through Argo CD Applications that the *rhoso-gitops* meta-chart creates. Use this overview to understand GitOps delivery, the dual Argo CD namespaces, infrastructure topology, -and sync-wave order before you deploy or customize the pattern. +and deployment convergence before you deploy or customize the pattern. [id="rhoso-gitops-gitops-delivery"] == GitOps delivery flow @@ -25,16 +25,16 @@ The delivery path is: ({solution-name-upstream} GitOps) . The meta-chart renders child Applications in `rhoso-gitops-standalone` (dedicated Argo CD instance) -. The child apps sync upstream `example/*` overlays in order (Operators, - networks, control plane, data plane) +. The child apps sync upstream `example/*` overlays (Operators, + networks, control plane, data plane) and converge through retry policies -.GitOps application delivery and sync-wave ordering +.GitOps application delivery image::rhoso-gitops/rhoso-gitops-applications.svg[{rhoso-gitops-pattern} GitOps application delivery,700] The diagram shows the parent Application in `vp-gitops`, child Applications in -`rhoso-gitops-standalone`, and the upstream Kustomize overlays they sync. Sync-wave -annotations order deployment from infrastructure Operators through the data -plane. +`rhoso-gitops-standalone`, and the upstream Kustomize overlays they sync. +All child Applications deploy at sync-wave 0 and converge eventually through +retry policies. [id="rhoso-gitops-dual-argocd"] == Dual Argo CD namespaces @@ -65,44 +65,38 @@ image::rhoso-gitops/rhoso-gitops-infrastructure.svg[{rhoso-gitops-pattern} infra * *Data plane hosts*: One or more {rhel-short} compute nodes run {rh-rhoso-short} data plane elements and connect to the control plane. -[id="rhoso-gitops-sync-waves"] -== Application sync order +[id="rhoso-gitops-deployment-convergence"] +== Deployment convergence -Child Applications deploy in sync-wave order when Argo CD reconciles the parent -*rhoso-gitops* Application. All applications use automated sync with a retry -policy by default. +All child Applications deploy at sync-wave `0` (the default) when Argo CD +reconciles the parent *rhoso-gitops* Application. Argo CD launches every child +simultaneously; each retries (per `syncPolicy.retry`) until its upstream +dependencies are satisfied and converges eventually. -[cols="2,3,1",options="header"] +[cols="2,3",options="header"] |=== -| Application | Purpose | Sync wave +| Application | Purpose | `operator-dependencies` | Infrastructure Operators (cert-manager, MetalLB, nmstate, observability) -| `-20` | `openstack-operator` | OpenStack Operator subscription -| `-20` | `openstack-operator-cr` | Main `OpenStack` custom resource -| `-15` | `openstack-secrets` | Secure-backend sync (disabled by default) -| `-10` | `openstack-networks` | Network configuration -| `0` | `openstack-controlplane` | `OpenStackControlPlane` -| `10` | `openstack-dataplane` | Data plane -| `20` |=== After you change overrides, confirm child apps in the Argo CD UI or with diff --git a/static/images/rhoso-gitops/rhoso-gitops-applications.svg b/static/images/rhoso-gitops/rhoso-gitops-applications.svg index 633860e1f..8c2453594 100644 --- a/static/images/rhoso-gitops/rhoso-gitops-applications.svg +++ b/static/images/rhoso-gitops/rhoso-gitops-applications.svg @@ -170,19 +170,19 @@ Validated Pattern: rhoso-​gitopsWave -20: operator-​dependenciesoperator-​dependenciesInfra + VSO/ESOWave -20: openstack-​operatoropenstack-​operatorOpenStack operatorWave -15: openstack-​operator-​cropenstack-​operator-​crMain OpenStack CRWave -10: openstack-​secretsopenstack-​secretsSecure backend syncWave 0: openstack-​networksopenstack-​networksNetworksWave 10: openstack-​controlplaneopenstack-​controlplaneOpenStackControlPlaneWave 20: openstack-​dataplaneopenstack-​dataplaneData planeOpenShift Cluster (OCP)Red Hat OpenStack Services on OpenShift syncWave 20converges syncWave 20converges syncWave 15converges syncWave 10converges syncWave 0converges syncWave 10converges