Convention: only the root app-of-apps (platform) auto-syncs so it picks up
new/changed child Application definitions from Git. Every leaf service app
(vault, headlamp, harbor, jenkins, sonarqube, external-secrets,
kube-prometheus-stack) now requires an explicit manual Sync — matches
cluster-bootstrap and homelab-services' existing ignis convention.
backendRefs[].group and .weight get server-side defaulted by the Gateway
API admission webhook but are omitted from our manifest, so ArgoCD saw
permanent OutOfSync even though the route is Accepted/ResolvedRefs=True
and Grafana is reachable. ignoreDifferences on those two fields closes
the false diff.
Each platform/apps/<service>/ now holds its own application.yaml
(multi-source: chart + values + raw-manifest extras), values.yaml, and
any extra manifests (HTTPRoute, RBAC, ClusterSecretStore) together,
replacing the split apps/*.yaml + manifests/*/ + separate *-config
Application pattern.
Root platform-app.yaml now recurses platform/apps/*/application.yaml
only. Extras get a resource-level sync-wave (1) so they still land
after their service's Helm chart within the same Application sync.
Also adds an HTTPRoute for vault (vault.fireflylab.local) - exposed
same as every other service here, accepted as LAN-only exposure.
Two-source ArgoCD Applications (upstream chart + values from this repo),
same pattern as cluster-bootstrap. Each service paired with a *-config
Application for HTTPRoute/RBAC/ClusterSecretStore that must exist
after the main install (separate sync wave).
Chart targetRevision pins and HTTPRoute backendRef service names are
best-effort - marked TODO/verify in-file since no live helm repo access
this session to confirm current versions or actual rendered svc names.