Skip to content

Commit a57cdf9

Browse files
allamandWorkshop User
andcommitted
fix(crossplane): stop NATGateway late-initializing vpcId (zonal create failure) (#718)
* fix(crossplane): stop NATGateway late-initializing vpcId The PlatformCluster Composition never sets spec.forProvider.vpcId on the NATGateway, but the Upbound AWS EC2 provider late-initializes it from the observed resource. availabilityMode defaults to "zonal", for which the EC2 API rejects VpcId on create: MissingParameter: VpcId is not supported for a NAT gateway with availability mode zonal This stays dormant while the NAT exists (observe-only), but any (re)create - e.g. after an out-of-band NAT deletion - fails, which breaks the private subnet default route, blocks provider image pulls, and cascades into ArgoCD cluster-cache sync errors. Excluding LateInitialize from managementPolicies prevents the provider from copying vpcId into the spec, so (re)create uses subnetId only and succeeds. * fix(bootstrap): replace {{- if }} blocks with dig (directory-mode compatible) + open addon enablement via GitLab overlay CRITICAL: the PR #628 cherry-pick added Go-template {{- if }} control blocks to addons.yaml. gitops/bootstrap is applied in ArgoCD directory mode (raw YAML), so {{- if }} broke YAML parsing — bootstrap app errored: 'Failed to unmarshal addons.yaml: line 28 could not find expected':''. Fix: use sprig 'dig' (missingkey-safe) for optional overlay_repo_* annotations instead of {{- if }} structural control flow. Overlay source is now always present, defaulting to the addons/fleet repo when overlay_repo_url is absent (idempotent no-op). Valid YAML, backward-compatible, missingkey-safe. Also opens addon enablement to tenants: fleet-secret appsets (hub + spokes) now merge $overlay enabled-addons.yaml/addon-overrides.yaml from GitLab fleet-config on top of the GitHub defaults. --------- Co-authored-by: Workshop User <workshopuser@example.com>
1 parent 7903dc2 commit a57cdf9

4 files changed

Lines changed: 27 additions & 11 deletions

File tree

gitops/abstractions/crossplane/platform-cluster/templates/composition.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,16 @@ spec:
274274
apiVersion: ec2.aws.upbound.io/v1beta1
275275
kind: NATGateway
276276
spec:
277+
# Exclude LateInitialize so the provider does not copy the observed
278+
# vpcId back into spec.forProvider. availabilityMode defaults to
279+
# "zonal", and a late-initialized vpcId makes (re)create fail with:
280+
# "VpcId is not supported for a NAT gateway with availability mode zonal".
281+
# The Composition intentionally never sets vpcId here; subnetId is enough.
282+
managementPolicies:
283+
- Observe
284+
- Create
285+
- Update
286+
- Delete
277287
forProvider:
278288
allocationIdSelector:
279289
matchControllerRef: true

gitops/bootstrap/addons.yaml

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,9 @@ spec:
2424
- repoURL: '{{ .metadata.annotations.addonsRepoURL }}'
2525
targetRevision: '{{ .metadata.annotations.addonsRepoRevision }}'
2626
ref: defaults
27-
{{- if .metadata.annotations.overlay_repo_url }}
28-
- repoURL: '{{ .metadata.annotations.overlay_repo_url }}'
29-
targetRevision: '{{ .metadata.annotations.overlay_repo_revision }}'
27+
- repoURL: '{{ dig "overlay_repo_url" .metadata.annotations.addonsRepoURL .metadata.annotations }}'
28+
targetRevision: '{{ dig "overlay_repo_revision" .metadata.annotations.addonsRepoRevision .metadata.annotations }}'
3029
ref: overlay
31-
{{- end }}
3230
- repoURL: '{{ .metadata.annotations.addonsRepoURL }}'
3331
path: 'platform-charts/appset-chart'
3432
targetRevision: '{{ .metadata.annotations.addonsRepoRevision }}'
@@ -46,14 +44,12 @@ spec:
4644
- $defaults/{{ .metadata.annotations.addonsRepoBasepath }}addons/registry/ml.yaml
4745
- $defaults/{{ .metadata.annotations.addonsRepoBasepath }}overlays/environments/{{ .metadata.labels.environment }}/overrides.yaml
4846
- $defaults/{{ .metadata.annotations.addonsRepoBasepath }}overlays/clusters/{{ .nameNormalized }}/overrides.yaml
49-
{{- if .metadata.annotations.overlay_repo_url }}
50-
- $overlay/{{ .metadata.annotations.overlay_repo_basepath }}overlays/environments/{{ .metadata.labels.environment }}/overrides.yaml
51-
- $overlay/{{ .metadata.annotations.overlay_repo_basepath }}overlays/clusters/{{ .nameNormalized }}/overrides.yaml
52-
{{- end }}
47+
- $overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.addonsRepoBasepath .metadata.annotations }}overlays/environments/{{ .metadata.labels.environment }}/overrides.yaml
48+
- $overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.addonsRepoBasepath .metadata.annotations }}overlays/clusters/{{ .nameNormalized }}/overrides.yaml
5349
valuesObject:
54-
overlayRepoURLGit: '{{ default "" .metadata.annotations.overlay_repo_url }}'
55-
overlayRepoURLGitRevision: '{{ default "main" .metadata.annotations.overlay_repo_revision }}'
56-
overlayRepoURLGitBasePath: '{{ default "" .metadata.annotations.overlay_repo_basepath }}'
50+
overlayRepoURLGit: '{{ dig "overlay_repo_url" "" .metadata.annotations }}'
51+
overlayRepoURLGitRevision: '{{ dig "overlay_repo_revision" "main" .metadata.annotations }}'
52+
overlayRepoURLGitBasePath: '{{ dig "overlay_repo_basepath" "" .metadata.annotations }}'
5753
destination:
5854
namespace: argocd
5955
name: '{{ .name }}'

gitops/bootstrap/fleet-secrets.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ spec:
3333
- repoURL: '{{ .metadata.annotations.fleetRepoURL }}'
3434
targetRevision: '{{ .metadata.annotations.fleetRepoRevision }}'
3535
ref: values
36+
- repoURL: '{{ dig "overlay_repo_url" .metadata.annotations.fleetRepoURL .metadata.annotations }}'
37+
targetRevision: '{{ dig "overlay_repo_revision" .metadata.annotations.fleetRepoRevision .metadata.annotations }}'
38+
ref: overlay
3639
- repoURL: '{{ .metadata.annotations.addonsRepoURL }}'
3740
targetRevision: '{{ .metadata.annotations.addonsRepoRevision }}'
3841
path: 'platform-charts/fleet-secret'
@@ -59,6 +62,8 @@ spec:
5962
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}fleet/members/{{ .clusterName }}/values.yaml'
6063
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}overlays/environments/{{ .labels.environment }}/enabled-addons.yaml'
6164
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}overlays/clusters/{{ .clusterName }}/addon-overrides.yaml'
65+
- '$overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.fleetRepoBasepath .metadata.annotations }}overlays/environments/{{ .labels.environment }}/enabled-addons.yaml'
66+
- '$overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.fleetRepoBasepath .metadata.annotations }}overlays/clusters/{{ .clusterName }}/addon-overrides.yaml'
6267
destination:
6368
name: '{{ .name }}'
6469
namespace: argocd

gitops/bootstrap/hub-fleet-secret.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ spec:
2626
- repoURL: '{{ .metadata.annotations.fleetRepoURL }}'
2727
targetRevision: '{{ .metadata.annotations.fleetRepoRevision }}'
2828
ref: values
29+
- repoURL: '{{ dig "overlay_repo_url" .metadata.annotations.fleetRepoURL .metadata.annotations }}'
30+
targetRevision: '{{ dig "overlay_repo_revision" .metadata.annotations.fleetRepoRevision .metadata.annotations }}'
31+
ref: overlay
2932
- repoURL: '{{ .metadata.annotations.addonsRepoURL }}'
3033
targetRevision: '{{ .metadata.annotations.addonsRepoRevision }}'
3134
path: 'platform-charts/fleet-secret'
@@ -42,6 +45,8 @@ spec:
4245
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}fleet/hub/values.yaml'
4346
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}overlays/environments/control-plane/enabled-addons.yaml'
4447
- '$values/{{ .metadata.annotations.fleetRepoBasepath }}overlays/clusters/{{ .metadata.annotations.aws_cluster_name }}/addon-overrides.yaml'
48+
- '$overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.fleetRepoBasepath .metadata.annotations }}overlays/environments/control-plane/enabled-addons.yaml'
49+
- '$overlay/{{ dig "overlay_repo_basepath" .metadata.annotations.fleetRepoBasepath .metadata.annotations }}overlays/clusters/{{ .metadata.annotations.aws_cluster_name }}/addon-overrides.yaml'
4550
destination:
4651
name: '{{ .name }}'
4752
namespace: argocd

0 commit comments

Comments
 (0)