Skip to content

Commit fb07057

Browse files
committed
fix: add sync-wave annotations, MCO wait gate, and updated docs
- Add explicit sync-wave to all active applications in values-hub.yaml - Add sync-wave 48 to commented supply-chain application - Wait for MachineConfigPool rollout before vault-config-jwt - Update SYNC-WAVE-INVENTORY with unified deployment timeline Signed-off-by: Min Zhang <minzhang@redhat.com>
1 parent 2a05499 commit fb07057

3 files changed

Lines changed: 157 additions & 51 deletions

File tree

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ install: operator-deploy post-install ## installs the pattern and loads the secr
1818
.PHONY: post-install
1919
post-install: ## Post-install tasks
2020
make load-secrets
21+
@echo "Waiting for MachineConfigPool rollout to complete..."
22+
oc wait mcp/master --for=condition=Updated --timeout=600s
2123
make vault-config-jwt
2224
@echo "Done"
2325

docs/SYNC-WAVE-INVENTORY.md

Lines changed: 137 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,114 @@ All `argocd.argoproj.io/sync-wave` assignments in `layered-zero-trust`.
44

55
A +31 offset was applied to every value so that all waves are positive (>= 1), preserving the original relative ordering. This accommodates the Validated Patterns operator applying the Argo CD super-role later than before, which caused resources with negative sync waves to fail.
66

7+
## Unified deployment timeline
8+
9+
Every sync-wave in the repository, in order. **App** = hub-level Argo CD Application creation. **chart** = resource inside a chart (resolved locally within that app's sync). **sub** = operator Subscription.
10+
11+
| Wave | Component | Scope | What |
12+
| ---: | --- | --- | --- |
13+
| 1 | compliance-scanning | **App** | Argo CD Application created on hub |
14+
| 5 | acm | **App** | |
15+
| 5 | rh-cert-manager | **App** | |
16+
| 10 | acm-managed-clusters | **App** | |
17+
| 21 | ztvp-certificates | **App** | |
18+
| 21 | └ compliance-scanning | chart | apiserver-encryption, pvc, scan-setting, scan-setting-binding |
19+
| 22 | └ ztvp-certificates | chart | RBAC (7 resources), configmap-script |
20+
| 23 | └ ztvp-certificates | chart | ca-extraction-job-initial, ca-extraction-cronjob |
21+
| 25 | vault | **App** | |
22+
| 25 | └ ztvp-certificates | chart | managedclusterset-binding |
23+
| 26 | └ ztvp-certificates | chart | distribution-policy (3 resources) |
24+
| 26 | └ openshift-storage | ns | Namespace + OperatorGroup |
25+
| 26 | └ rhtpa-operator | ns | Namespace + OperatorGroup |
26+
| 27 | └ odf | sub | ODF operator install |
27+
| 27 | └ rhtpa-operator | sub | RHTPA operator install |
28+
| 28 | └ quay-operator | sub | Quay operator install |
29+
| 29 | └ rhtas-operator | sub | RHTAS operator install |
30+
| 30 | golang-external-secrets | **App** | |
31+
| 30 | zero-trust-workload-identity-manager | **App** | |
32+
| 31 | └ rhtpa-operator | chart | ingress-ca-job (SA, Role, RoleBinding, ConfigMap, Job) |
33+
| 32 | └ rhtpa-operator | chart | operator-rolebinding (2 bindings) |
34+
| 32 | └ noobaa-mcg | chart | default-backingstore |
35+
| 32 | └ acs-central | chart | rbac/* (SA, Role, ClusterRole, bindings) |
36+
| 32 | └ quay-enterprise | ns | Namespace |
37+
| 32 | └ trusted-artifact-signer | ns | Namespace |
38+
| 32 | └ trusted-profile-analyzer | ns | Namespace |
39+
| 33 | └ rhtpa-operator | chart | ingress-ca-job (completion Job) |
40+
| 33 | └ noobaa-mcg | chart | noobaa-system |
41+
| 34 | └ rhtpa-operator | chart | oidc-cli-secret |
42+
| 34 | └ noobaa-mcg | chart | bucket-class |
43+
| 35 | rh-keycloak | **App** | |
44+
| 36 | noobaa-mcg | **App** | |
45+
| 36 | └ rhtpa-operator | chart | postgresql-serviceaccount, postgresql-external-secret, object-bucket-claim |
46+
| 36 | └ keycloak | chart | keycloak.yaml (Keycloak CR) |
47+
| 36 | └ quay-registry | chart | object-bucket-claim |
48+
| 36 | └ acs-central | chart | admin-password-secret, central-htpasswd-external-secret, keycloak-client-secret-external-secret |
49+
| 36 | └ qtodo | chart | truststore-secret-external-secret |
50+
| 37 | └ quay-registry | chart | quay-s3-setup-serviceaccount (5 resources) |
51+
| 37 | └ acs-central | chart | create-htpasswd-field (Job) |
52+
| 38 | qtodo | **App** | |
53+
| 38 | └ quay-registry | chart | quay-config-bundle-secret |
54+
| 39 | └ rhtpa-operator | chart | s3-credentials-secret |
55+
| 39 | └ quay-registry | chart | quay-s3-credentials-job |
56+
| 41 | acs-central | **App** | |
57+
| 41 | quay-registry | **App** | |
58+
| 41 | trusted-profile-analyzer | **App** | |
59+
| 41 | └ rhtpa-operator | chart | postgresql-statefulset, postgresql-service |
60+
| 41 | └ keycloak | chart | keycloak-realm-import |
61+
| 41 | └ quay-registry | chart | quay-registry (QuayRegistry CR) |
62+
| 41 | └ acs-central | chart | central-cr (Central CR) |
63+
| 41 | └ qtodo | chart | postgresql-statefulset, postgresql-service, qtodo-truststore-config |
64+
| 43 | └ acs-central | chart | create-cluster-init-bundle (Job) |
65+
| 44 | └ acs-central | chart | create-auth-provider (Job) |
66+
| 46 | acs-secured-cluster | **App** | |
67+
| 46 | trusted-artifact-signer | **App** | |
68+
| 46 | └ acs-central | chart | console-link |
69+
| 46 | └ acs-secured-cluster | chart | secured-cluster-cr |
70+
| 46 | └ rhtas-operator | chart | securesign |
71+
| 48 | supply-chain | **App** | |
72+
| 49 | └ rhtpa-operator | chart | spiffe-helper-config |
73+
| 51 | └ rhtpa-operator | chart | trusted-profile-analyzer (supporting objects) |
74+
| 51 | └ qtodo | chart | app-deployment, app-service |
75+
| 51 | └ supply-chain | chart | workspaces |
76+
| 71 | └ rhtpa-operator | chart | operator-readiness-check (SA, Role, Job) |
77+
| 81 | └ rhtpa-operator | chart | trusted-profile-analyzer (Policy/CR) |
78+
779
## Application-level waves (`values-hub.yaml`)
880

9-
These control when each Argo CD Application syncs relative to other Applications.
10-
11-
| Application | Old | Current | Comment | Active? |
12-
| --- | ---: | ---: | --- | --- |
13-
| compliance-scanning | -30 | 1 | Earliest app | yes |
14-
| ztvp-certificates | -10 | 21 | Custom CA distribution | yes |
15-
| openshift-storage (OperatorGroup) | -5 | 26 | Propagated to OperatorGroup | commented |
16-
| rhtpa-operator (namespace) | -5 | 26 | Before operator subscription | commented |
17-
| odf (subscription) | -4 | 27 | After OperatorGroup (26) | commented |
18-
| rhtpa-operator (subscription) | -4 | 27 | After OperatorGroup (26) | commented |
19-
| quay-operator (subscription) | -3 | 28 | After ODF operator | commented |
20-
| rhtas-operator (subscription) | -2 | 29 | After Quay operator | commented |
21-
| quay-enterprise (namespace) | 1 | 32 | Before NooBaa and Quay components | commented |
22-
| trusted-artifact-signer (namespace) | 1 | 32 | Auto-created by RHTAS operator | commented |
23-
| trusted-profile-analyzer (namespace) | 1 | 32 | Before RHTPA components | commented |
24-
| noobaa-mcg | 5 | 36 | Deploy after core services | commented |
25-
| acs-central | 10 | 41 || yes |
26-
| quay-registry | 10 | 41 | Deploy after NooBaa | commented |
27-
| trusted-profile-analyzer | 10 | 41 | Chart resources (OBC, DB, etc.) | commented |
28-
| acs-secured-cluster | 15 | 46 || yes |
29-
| trusted-artifact-signer | 15 | 46 | Deploy after dependencies | commented |
81+
| Application | Old | Current | Comment |
82+
| --- | ---: | ---: | --- |
83+
| compliance-scanning | -30 | 1 | Earliest app |
84+
| rh-cert-manager || 5 | Infrastructure, early (newly added) |
85+
| acm || 5 | Infrastructure, early (newly added) |
86+
| acm-managed-clusters || 10 | After ACM (newly added) |
87+
| ztvp-certificates | -10 | 21 | Custom CA distribution |
88+
| vault || 25 | Core secret store (newly added) |
89+
| openshift-storage (OperatorGroup) | -5 | 26 | Propagated to OperatorGroup |
90+
| rhtpa-operator (namespace) | -5 | 26 | Before operator subscription |
91+
| odf (subscription) | -4 | 27 | After OperatorGroup (26) |
92+
| rhtpa-operator (subscription) | -4 | 27 | After OperatorGroup (26) |
93+
| quay-operator (subscription) | -3 | 28 | After ODF operator |
94+
| rhtas-operator (subscription) | -2 | 29 | After Quay operator |
95+
| golang-external-secrets || 30 | After Vault (newly added) |
96+
| zero-trust-workload-identity-manager || 30 | After Vault/certs (newly added) |
97+
| quay-enterprise (namespace) | 1 | 32 | Before NooBaa and Quay components |
98+
| trusted-artifact-signer (namespace) | 1 | 32 | Auto-created by RHTAS operator |
99+
| trusted-profile-analyzer (namespace) | 1 | 32 | Before RHTPA components |
100+
| rh-keycloak || 35 | After ZTWIM for SPIFFE IdP (newly added) |
101+
| noobaa-mcg | 5 | 36 | Deploy after core services |
102+
| qtodo || 38 | After Keycloak, Vault (newly added) |
103+
| acs-central | 10 | 41 ||
104+
| quay-registry | 10 | 41 | Deploy after NooBaa |
105+
| trusted-profile-analyzer | 10 | 41 | Chart resources (OBC, DB, etc.) |
106+
| acs-secured-cluster | 15 | 46 ||
107+
| trusted-artifact-signer | 15 | 46 | Deploy after dependencies |
108+
| supply-chain || 48 | After RHTAS/ACS, before chart templates (newly added) |
30109

31110
## Chart-level waves (templates)
32111

33-
These control resource ordering within a single Application's sync.
112+
These control resource ordering within a single Application's sync. Template waves are resolved locally within each app, not globally across all apps.
34113

35-
### compliance-scanning (`charts/compliance-scanning/templates/`)
114+
### compliance-scanning (`charts/compliance-scanning/templates/`) — App wave: 1
36115

37116
| Resource | Old | Current |
38117
| --- | ---: | ---: |
@@ -41,7 +120,7 @@ These control resource ordering within a single Application's sync.
41120
| scan-setting.yaml | -10 | 21 |
42121
| scan-setting-binding.yaml | -10 | 21 |
43122

44-
### ztvp-certificates (`charts/ztvp-certificates/templates/`)
123+
### ztvp-certificates (`charts/ztvp-certificates/templates/`) — App wave: 21
45124

46125
| Resource | Old | Current |
47126
| --- | ---: | ---: |
@@ -52,41 +131,22 @@ These control resource ordering within a single Application's sync.
52131
| managedclusterset-binding.yaml | -6 | 25 |
53132
| distribution-policy.yaml (3 resources) | -5 | 26 |
54133

55-
### rhtpa-operator (`charts/rhtpa-operator/templates/`)
56-
57-
| Resource | Old | Current |
58-
| --- | ---: | ---: |
59-
| ingress-ca-job.yaml (SA, Role, RoleBinding, ConfigMap, Job) | 0 | 31 |
60-
| operator-rolebinding.yaml (2 bindings) | 1 | 32 |
61-
| ingress-ca-job.yaml (completion Job) | 2 | 33 |
62-
| oidc-cli-secret.yaml | 3 | 34 |
63-
| postgresql-serviceaccount.yaml | 5 | 36 |
64-
| postgresql-external-secret.yaml | 5 | 36 |
65-
| object-bucket-claim.yaml | 5 | 36 |
66-
| s3-credentials-secret.yaml | 8 | 39 |
67-
| postgresql-statefulset.yaml | 10 | 41 |
68-
| postgresql-service.yaml | 10 | 41 |
69-
| spiffe-helper-config.yaml | 18 | 49 |
70-
| trusted-profile-analyzer.yaml (supporting objects) | 20 | 51 |
71-
| operator-readiness-check.yaml (SA, Role, Job) | 40 | 71 |
72-
| trusted-profile-analyzer.yaml (Policy/CR) | 50 | 81 |
73-
74-
### noobaa-mcg (`charts/noobaa-mcg/templates/`)
134+
### noobaa-mcg (`charts/noobaa-mcg/templates/`) — App wave: 36
75135

76136
| Resource | Old | Current |
77137
| --- | ---: | ---: |
78138
| default-backingstore.yaml | 1 | 32 |
79139
| noobaa-system.yaml | 2 | 33 |
80140
| bucket-class.yaml | 3 | 34 |
81141

82-
### keycloak (`charts/keycloak/templates/`)
142+
### keycloak (`charts/keycloak/templates/`) — App wave: 35
83143

84144
| Resource | Old | Current |
85145
| --- | ---: | ---: |
86146
| keycloak.yaml | 5 | 36 |
87147
| keycloak-realm-import.yaml | 10 | 41 |
88148

89-
### quay-registry (`charts/quay-registry/templates/`)
149+
### quay-registry (`charts/quay-registry/templates/`) — App wave: 41
90150

91151
| Resource | Old | Current |
92152
| --- | ---: | ---: |
@@ -96,7 +156,7 @@ These control resource ordering within a single Application's sync.
96156
| quay-s3-credentials-job.yaml | 8 | 39 |
97157
| quay-registry.yaml | 10 | 41 |
98158

99-
### acs-central (`charts/acs-central/templates/`)
159+
### acs-central (`charts/acs-central/templates/`) — App wave: 41
100160

101161
| Resource | Old | Current |
102162
| --- | ---: | ---: |
@@ -110,19 +170,38 @@ These control resource ordering within a single Application's sync.
110170
| create-auth-provider.yaml (Job) | 13 | 44 |
111171
| console-link.yaml | 15 | 46 |
112172

113-
### acs-secured-cluster (`charts/acs-secured-cluster/templates/`)
173+
### acs-secured-cluster (`charts/acs-secured-cluster/templates/`) — App wave: 46
114174

115175
| Resource | Old | Current |
116176
| --- | ---: | ---: |
117177
| secured-cluster-cr.yaml | 15 | 46 |
118178

119-
### rhtas-operator (`charts/rhtas-operator/templates/`)
179+
### rhtas-operator (`charts/rhtas-operator/templates/`) — App wave: 46
120180

121181
| Resource | Old | Current |
122182
| --- | ---: | ---: |
123183
| securesign.yaml | 15 | 46 |
124184

125-
### qtodo (`charts/qtodo/templates/`)
185+
### rhtpa-operator (`charts/rhtpa-operator/templates/`) — App wave: 41
186+
187+
| Resource | Old | Current |
188+
| --- | ---: | ---: |
189+
| ingress-ca-job.yaml (SA, Role, RoleBinding, ConfigMap, Job) | 0 | 31 |
190+
| operator-rolebinding.yaml (2 bindings) | 1 | 32 |
191+
| ingress-ca-job.yaml (completion Job) | 2 | 33 |
192+
| oidc-cli-secret.yaml | 3 | 34 |
193+
| postgresql-serviceaccount.yaml | 5 | 36 |
194+
| postgresql-external-secret.yaml | 5 | 36 |
195+
| object-bucket-claim.yaml | 5 | 36 |
196+
| s3-credentials-secret.yaml | 8 | 39 |
197+
| postgresql-statefulset.yaml | 10 | 41 |
198+
| postgresql-service.yaml | 10 | 41 |
199+
| spiffe-helper-config.yaml | 18 | 49 |
200+
| trusted-profile-analyzer.yaml (supporting objects) | 20 | 51 |
201+
| operator-readiness-check.yaml (SA, Role, Job) | 40 | 71 |
202+
| trusted-profile-analyzer.yaml (Policy/CR) | 50 | 81 |
203+
204+
### qtodo (`charts/qtodo/templates/`) — App wave: 38
126205

127206
| Resource | Old | Current |
128207
| --- | ---: | ---: |
@@ -133,7 +212,7 @@ These control resource ordering within a single Application's sync.
133212
| app-deployment.yaml | 20 | 51 |
134213
| app-service.yaml | 20 | 51 |
135214

136-
### supply-chain (`charts/supply-chain/templates/`)
215+
### supply-chain (`charts/supply-chain/templates/`) — App wave: 48
137216

138217
| Resource | Old | Current |
139218
| --- | ---: | ---: |
@@ -144,3 +223,10 @@ These control resource ordering within a single Application's sync.
144223
| Resource | Old | Current |
145224
| --- | ---: | ---: |
146225
| noobaa-mcg example | 5 | 36 |
226+
227+
## Notes
228+
229+
- **"Old"** = value before the +31 offset. **"—"** = no sync-wave existed (defaulted to 0).
230+
- **"Current"** = value after the +31 offset plus newly added application-level annotations.
231+
- Template waves are resolved **locally within each app sync**, not globally. A template wave of 32 inside acs-central (app wave 41) does not conflict with a template wave of 32 inside noobaa-mcg (app wave 36); they run independently.
232+
- Sync waves control **Application creation order**, not readiness. A later wave means the Application resource is submitted to the hub later, but the earlier app's pods may not be fully running yet. For hard readiness gates, use Argo CD health checks or resource hooks.

values-hub.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,8 @@ clusterGroup:
232232
project: hub
233233
chart: acm
234234
chartVersion: 0.1.*
235+
annotations:
236+
argocd.argoproj.io/sync-wave: "5"
235237
ignoreDifferences:
236238
- group: internal.open-cluster-management.io
237239
kind: ManagedClusterInfo
@@ -245,6 +247,8 @@ clusterGroup:
245247
name: acm-managed-clusters
246248
project: hub
247249
path: charts/acm-managed-clusters
250+
annotations:
251+
argocd.argoproj.io/sync-wave: "10"
248252
ignoreDifferences:
249253
- group: cluster.open-cluster-management.io
250254
kind: ManagedCluster
@@ -270,6 +274,8 @@ clusterGroup:
270274
project: hub
271275
chart: hashicorp-vault
272276
chartVersion: 0.1.*
277+
annotations:
278+
argocd.argoproj.io/sync-wave: "25"
273279
# Custom Vault policies for least-privilege access
274280
# Each application gets access only to its specific secrets path
275281
#
@@ -425,11 +431,15 @@ clusterGroup:
425431
project: hub
426432
chart: golang-external-secrets
427433
chartVersion: 0.1.*
434+
annotations:
435+
argocd.argoproj.io/sync-wave: "30"
428436
rh-keycloak:
429437
name: rh-keycloak
430438
namespace: keycloak-system
431439
project: hub
432440
path: charts/keycloak
441+
annotations:
442+
argocd.argoproj.io/sync-wave: "35"
433443
# SPIFFE Identity Provider is enabled by default in the chart.
434444
# Override issuer/jwksUrl only if auto-generated values from cluster domain are not suitable.
435445
# overrides:
@@ -442,11 +452,15 @@ clusterGroup:
442452
namespace: cert-manager-operator
443453
project: hub
444454
path: charts/certmanager
455+
annotations:
456+
argocd.argoproj.io/sync-wave: "5"
445457
zero-trust-workload-identity-manager:
446458
name: zero-trust-workload-identity-manager
447459
namespace: zero-trust-workload-identity-manager
448460
project: hub
449461
path: charts/zero-trust-workload-identity-manager
462+
annotations:
463+
argocd.argoproj.io/sync-wave: "30"
450464
overrides:
451465
- name: spire.clusterName
452466
value: hub
@@ -455,6 +469,8 @@ clusterGroup:
455469
namespace: qtodo
456470
project: hub
457471
path: charts/qtodo
472+
annotations:
473+
argocd.argoproj.io/sync-wave: "38"
458474
ignoreDifferences:
459475
- kind: ServiceAccount
460476
jqPathExpressions:
@@ -487,6 +503,8 @@ clusterGroup:
487503
# name: supply-chain
488504
# project: hub
489505
# path: charts/supply-chain
506+
# annotations:
507+
# argocd.argoproj.io/sync-wave: "48"
490508
# ignoreDifferences:
491509
# - kind: ServiceAccount
492510
# jqPathExpressions:

0 commit comments

Comments
 (0)