Fleet values sync
Chart fleet-values-sync (charts/all/fleet-values-sync) keeps cross-cluster domain references in the field-content Argo CD Application aligned with ACM inventory — without committing cluster-specific URLs to Git.
It is part of the Validated Patterns clustergroup on hub and spokes. See also GitOps PUSH vs PULL and Region strategy.
What it does
| Mode | Cluster | Action |
|---|---|---|
| Hub | Hub | Reads ManagedCluster east/west + local ingress; patches hub field-content with deployer.domain, clusters.hub|east|west.domain, and API URLs |
| Hub | Hub | Pushes fleet-cross-cluster-config ConfigMap to spokes via ACM ManifestWork |
| Spoke | East / West | Reads ConfigMap; patches local field-content with clusters.hub.domain and global.hubClusterDomain |
What it does not do: import spoke API tokens, create ManagedCluster objects, or patch secrets. Tokens belong in one-time ACM import or RHDP secrets — see RHDP install playbook.
When it runs
- CronJob
fleet-values-syncin namespaceopenshift-gitops(deployed by clustergroup) - Default schedule: every 10 minutes
- Idempotent: skips patch when helm values already match
Data flow
flowchart LR
ACM["ACM ManagedCluster\neast / west"]
HUB["Hub CronJob\nfleet-values-sync"]
FC_H["field-content\n(hub)"]
MW["ManifestWork\nfleet-cross-cluster-config"]
FC_S["field-content\n(spoke)"]
ACM --> HUB
HUB --> FC_H
HUB --> MW
MW --> FC_S
Downstream charts consume patched values via clustergroup extraParametersNested — for example clusters.east.domain for Kafka Console, Skupper, Developer Hub topology, and console links.
Prerequisites
- Hub
field-contentApplication exists and syncs. - East and west clusters are imported in ACM and show Available.
ManagedClusterstatus includes API URL (ACM 2.16+:apiserverurl.openshift.ioclaim).
Until spokes are Available, the job logs ManagedCluster east not found yet and retries on the next CronJob tick.
Verify
# CronJob deployed
oc get cronjob fleet-values-sync -n openshift-gitops
# Manual run (hub)
oc delete job fleet-values-sync-manual -n openshift-gitops --ignore-not-found
oc create job fleet-values-sync-manual --from=cronjob/fleet-values-sync -n openshift-gitops
oc logs -n openshift-gitops job/fleet-values-sync-manual -f
# Domains in field-content
oc get application field-content -n openshift-gitops -o jsonpath='{.spec.source.helm.valuesObject.clusters}{"\n"}' | python3 -m json.tool
# Spoke received hub domain
oc get configmap fleet-cross-cluster-config -n openshift-gitops -o yaml
Also covered by bash scripts/verify-fleet.sh (checks CronJob presence).
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Stale clusters.east.domain on hub | Spoke not Available when job last ran | Wait for ACM import; run manual job |
Spoke missing clusters.hub.domain | ManifestWork not applied or spoke CronJob missing | Sync fleet-values-sync on spoke; check oc get manifestworks -n open-cluster-management |
| Wrong apps domain after ACM 2.16 upgrade | Old job read kube-apiserver claim only | Use chart ≥ fix for apiserverurl.openshift.io (included in this repo) |
Kafka Console / Skupper still point at example.com | field-content not patched yet | Confirm deployer.domain overridden by RHDP or fleet-values-sync; refresh affected Argo apps |
You patched tokens into field-content | Anti-pattern | Remove tokens from GitOps values; use ACM UI import — see troubleshooting |
Related
- Architecture — hub-spoke overview
- RHDP field content — RHDP injects
deployer.domainbefore fleet-values-sync runs - GitOps deployment chain — where
field-contentsits in the chain