Skip to content

Commit 000aea7

Browse files
Fix chart directory paths to match actual repo structure
The pattern repo uses charts/region/hub|east|west/ and charts/all/, not the App-of-Apps values-hub.yaml / east/ / west/ layout. - getting-started.md: fix repository layout block, values-hub.yaml → charts/region/hub/values.yaml (2 occurrences), ApplicationSet path east/ → charts/all/spoke-meta-push (PUSH) + charts/region/east/ (PULL) - ideas-for-customization.md: fix repo layout block, values table, ApplicationSet conceptual YAML, adding-spoke step 3, Regions table entry, Device Edge far-edge folder path Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 17ff1fa commit 000aea7

2 files changed

Lines changed: 41 additions & 35 deletions

File tree

content/patterns/hybrid-mesh-platform/getting-started.md

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Use cluster names **`hub`**, **`east`**, and **`west`**. Namespace **`stackrox`*
9191
| Operator / feature | Requirement |
9292
| --- | --- |
9393
| **OpenShift AI (RHOAI)** | Required for MaaS / vLLM inference. Needs Node Feature Discovery and GPU operator **only** if you enable GPU-accelerated models. CPU-based inference (Qwen3 / Granite on CPU) works without GPU. |
94-
| **GPU (optional)** | NVIDIA or AMD GPU node for accelerated vLLM. Without GPU, enable `modelServing.cpuOnly: true` in `values-hub.yaml`. |
94+
| **GPU (optional)** | NVIDIA or AMD GPU node for accelerated vLLM. Without GPU, enable `modelServing.cpuOnly: true` in `charts/region/hub/values.yaml`. |
9595
| **OpenShift Lightspeed** | Requires `OLSConfig` CRD and an OpenAI-compatible endpoint (MaaS on hub or external). |
9696
| **Vault** | HashiCorp Vault is deployed by the pattern operator as the secrets backend. |
9797

@@ -127,16 +127,19 @@ See [Cluster sizing](cluster-sizing) for metadata-driven minimum and recommended
127127
## Repository layout
128128

129129
```
130-
charts/all/ → component Helm charts (hub and spoke apps)
131-
values-global.yaml → pattern name and shared Git URL
132-
values-hub.yaml → hub clusterGroup (namespaces, subscriptions, applications, managedClusterGroups)
133-
values-east.yaml → east spoke clusterGroup
134-
values-west.yaml → west spoke clusterGroup
135-
values-secret.yaml → secrets (from values-secret.yaml.template; Vault + ESO)
136-
pattern.sh → Validated Patterns install wrapper
130+
charts/all/ → shared component Helm charts (50+ charts)
131+
charts/region/hub/ → hub bootstrap + hub clusterGroup values
132+
charts/region/east/ → east spoke bootstrap + clusterGroup values
133+
charts/region/west/ → west spoke bootstrap + clusterGroup values
134+
values-global.yaml → pattern name and shared Git URL
135+
values.yaml → root chart values (clustergroup subscription)
136+
values-secret.yaml → secrets (from values-secret.yaml.template; Vault + ESO)
137+
pattern.sh → Validated Patterns install wrapper
137138
```
138139

139-
Spokes **pull** their `clusterGroup` from Git via ACM labels (`clusterGroup=east` / `clusterGroup=west`) — no hub-push ApplicationSet to spoke Argo CD.
140+
The pattern uses a **dual GitOps strategy**:
141+
- **PUSH** — hub `ApplicationSet` (`fleet-spoke-push`) deploys `charts/all/spoke-meta-push` to each spoke cluster via ACM placement
142+
- **PULL** — each spoke's local Argo CD syncs its own `charts/region/east/` or `charts/region/west/` from Git autonomously
140143

141144
## Step 1: Fork the repository
142145

@@ -186,7 +189,7 @@ From the hub cluster (logged in with `oc`):
186189
./pattern.sh install
187190
```
188191

189-
The Pattern operator (or utility container) deploys the root `clustergroup` Application on the hub. ACM `managedClusterGroups` in `values-hub.yaml` register east and west spokes once they join the fleet.
192+
The Pattern operator (or utility container) deploys the root `clustergroup` Application on the hub. ACM `managedClusterGroups` in `charts/region/hub/values.yaml` register east and west spokes once they join the fleet.
190193

191194
## Step 4: Import managed clusters in ACM
192195

@@ -271,12 +274,13 @@ Associates Argo CD (`openshift-gitops`) with clusters chosen by placement — br
271274

272275
### ApplicationSet with clusterDecisionResource
273276

274-
For each cluster in the PlacementDecision, the ApplicationSet creates an Application that:
277+
For each cluster in the PlacementDecision, the hub ApplicationSet (`fleet-spoke-push`) creates an Application that:
275278

276-
- Uses repository path `east/` or `west/` (from `{{name}}`)
279+
- Uses repository path `charts/all/spoke-meta-push` (the PUSH meta chart) deployed to the spoke cluster
280+
- The spoke's local Argo CD then pulls its own `charts/region/east/` or `charts/region/west/` from Git autonomously
277281
- Deploys to remote cluster `{{name}}` via hub-stored cluster credentials
278282

279-
Adding a spoke with correct labels and a new folder (for example `south/`) automatically generates a new Application when the Placement matches.
283+
Adding a spoke with correct labels and a new `charts/region/south/` folder automatically generates a new Application when the Placement matches.
280284

281285
### Troubleshooting: no spoke Applications
282286

@@ -288,7 +292,7 @@ Adding a spoke with correct labels and a new folder (for example `south/`) autom
288292
| PlacementDecision | Decisions list `east`, `west` |
289293
| GitOpsCluster | `hub-spoke-gitops` reconciled; clusters visible in Argo CD UI |
290294
| RBAC | Role `applicationset-placementdecisions` for ApplicationSet controller |
291-
| Spoke charts | `east/` and `west/` valid Helm charts with `Chart.yaml` |
295+
| Spoke charts | `charts/region/east/` and `charts/region/west/` valid Helm charts with `Chart.yaml` |
292296

293297
## Step 7: Kiali multi-cluster (hub)
294298

content/patterns/hybrid-mesh-platform/ideas-for-customization.md

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,44 +15,46 @@ All configuration lives on branch **`main`**. Cluster-specific settings use dire
1515
### Repository layout
1616

1717
```
18-
. → Hub cluster (root Helm chart)
19-
east/ → East spoke cluster (self-contained Helm chart)
20-
west/ → West spoke cluster (self-contained Helm chart)
21-
components/ → Shared component charts referenced by all clusters
18+
charts/region/hub/ → Hub bootstrap + hub clusterGroup values
19+
charts/region/east/ → East spoke bootstrap + clusterGroup values
20+
charts/region/west/ → West spoke bootstrap + clusterGroup values
21+
charts/all/ → Shared component charts (50+ charts)
22+
values-global.yaml → Pattern name and shared Git URL
23+
values.yaml → Root chart values (clustergroup subscription)
2224
```
2325

24-
Each directory (`east/`, `west/`) is an independent Helm chart with its own `Chart.yaml`, `values.yaml`, and `templates/`. The hub uses the repository root (`.`) as its chart.
26+
Each `charts/region/<role>/` directory is an independent Helm chart with its own `Chart.yaml` and `values.yaml`. Component charts under `charts/all/` are referenced by hub and spoke clusterGroup Applications.
2527

2628
### How values and ApplicationSet interact
2729

2830
| Path / File | Purpose |
2931
| --- | --- |
30-
| `values.yaml` | Hub — operators, observability, gateway, hub-only components |
31-
| `east/values.yaml` | East spokesubscriptions, domains, spoke Applications |
32-
| `west/values.yaml` | West spoke — subscriptions, domains, spoke Applications |
33-
| `values-lite.yaml` | Minimal hub profile for demos (fewer operators) |
34-
| `components/` | Shared charts referenced by hub and spoke Application CRs |
32+
| `values-global.yaml` | Pattern name and shared Git URL |
33+
| `charts/region/hub/values.yaml` | Hub clusterGroupoperators, observability, gateway, managedClusterGroups |
34+
| `charts/region/east/values.yaml` | East spoke clusterGroup — subscriptions, domains, Applications |
35+
| `charts/region/west/values.yaml` | West spoke clusterGroup — subscriptions, domains, Applications |
36+
| `charts/all/` | Shared component charts referenced by all clusters |
3537

36-
The ACM ApplicationSet (`components/acm-hub-spoke`) uses a **`clusterDecisionResource`** generator:
38+
The pattern uses **dual GitOps**. The hub ApplicationSet (`charts/all/acm-hub-spoke`) uses a `clusterDecisionResource` generator for the PUSH leg:
3739

3840
```yaml
39-
# Conceptual — see pattern repo for full template
41+
# Hub ApplicationSet (fleet-spoke-push) — actual path in the pattern repo
4042
source:
41-
path: '{{name}}' # east/ or west/
43+
path: charts/all/spoke-meta-push # PUSH: meta chart deploys to spoke cluster
4244
destination:
43-
name: '{{name}}' # remote cluster via Argo CD secret
45+
name: '{{name}}' # east or west, via hub Argo CD cluster secret
4446
```
4547
46-
Each spoke chart generates **child Application CRs** that the spoke's own Argo CD syncs locally — the hub does not apply spoke workloads directly.
48+
The spoke's local Argo CD then autonomously **PULL**s from `charts/region/east/` or `charts/region/west/` — the hub does not apply spoke workloads directly.
4749

4850
## Adding a new spoke cluster
4951

5052
1. Provision OpenShift and import the cluster into ACM.
5153
2. Label `ManagedCluster`: `region=<name>`, `cluster.open-cluster-management.io/clusterset=global`.
52-
3. Copy `east/` to a new folder (for example `south/`) and update `clusterName`, `deployer.domain`, `clusters.hub.domain`.
53-
4. Add `clusters.south.domain` (or equivalent) to hub `values.yaml`.
54-
5. Register the spoke as an Argo CD cluster secret on the hub (name must match folder name).
55-
6. Validate: `helm lint south/` and `helm template south/`.
54+
3. Copy `charts/region/east/` to `charts/region/south/` and update `clusterName`, `deployer.domain`, `clusters.hub.domain` inside the new chart.
55+
4. Add `clusters.south.domain` (or equivalent) to `charts/region/hub/values.yaml`.
56+
5. Register the spoke as an Argo CD cluster secret on the hub (name must match the folder name: `south`).
57+
6. Validate: `helm lint charts/region/south/` and `helm template charts/region/south/`.
5658
7. Confirm Placement selects the cluster and ApplicationSet creates `south-spoke-components`.
5759

5860
## Minimal profiles
@@ -69,7 +71,7 @@ Disables heavy subscriptions while preserving GitOps bootstrap and ApplicationSe
6971

7072
| Area | Customization |
7173
| --- | --- |
72-
| Regions | Add spokes beyond east/west — new folder + ACM labels + hub gateway weights |
74+
| Regions | Add spokes beyond east/west — new `charts/region/<name>/` folder + ACM labels + hub gateway weights |
7375
| Gateway weights | `gateway.weights.east` / `west` for canary or active-active front traffic |
7476
| API affinity | `gateway.apiWeights` when Socket.IO can span spokes |
7577
| Circuit breaking | Tune `gateway.circuitBreaking` per environment (see [Hub Gateway](hub-gateway)) |
@@ -91,7 +93,7 @@ The current spokes require full OpenShift clusters (3 workers, cloud or bare-met
9193

9294
1. Provision a RHEL device with MicroShift installed (`rpm-ostree install microshift`).
9395
2. Import the device into ACM as a `ManagedCluster` with labels `region=far-edge`.
94-
3. Add a new folder (for example `far-edge/`) in the pattern repo with a lightweight values profile — omit Kafka 3-replica and DevSpaces; keep MQTT bridge, Camel K lite, and Skupper.
96+
3. Add `charts/region/far-edge/` in the pattern repo with a lightweight values profile — omit Kafka 3-replica and DevSpaces; keep MQTT bridge, Camel K lite, and Skupper.
9597
4. Register a Skupper `AccessToken` on the device (same outbound-only mTLS as cloud spokes).
9698
5. Hub Grafana aggregates metrics from the far-edge site the same way it does from east/west.
9799

0 commit comments

Comments
 (0)