Skip to content

feat(gcp-566): version resolution controller and Cincinnati integration#58

Merged
apahim merged 8 commits intoapahim:mainfrom
cristianoveiga:GCP-566
Apr 13, 2026
Merged

feat(gcp-566): version resolution controller and Cincinnati integration#58
apahim merged 8 commits intoapahim:mainfrom
cristianoveiga:GCP-566

Conversation

@cristianoveiga
Copy link
Copy Markdown
Collaborator

Summary

  • Add Cincinnati client to resolve OCP versions (e.g., 4.22.0-ec.4) to release image pullspecs via the OpenShift update service
  • Add new cls-version-resolution-controller Helm chart — a status-only controller that resolves versions and reports the result as a status condition
  • Expose .cluster.status in template context so HC/NodePool templates can read the resolved image
  • Replace hardcoded release image in HostedCluster and NodePool templates with status-based lookup
  • Add precondition on HC templating controller to wait for version resolution before creating resources

Jira

GCP-566 — CLS Controller: Version resolution controller and template updates
Part of epic GCP-562 — Adopt Cincinnati for cluster version resolution and upgrades

Dependencies

  • GCP-565 — CLS Backend must store release.version and release.channelGroup in cluster spec

Test plan

  • Cincinnati client unit tests pass (version resolution, error cases, channel derivation)
  • Template engine tests pass (status in context, rendering release image from status)
  • All existing tests pass (go test ./...)
  • Build succeeds (go build ./...)
  • Integration test: deploy version resolution controller, create cluster with release.version, verify status condition
  • Integration test: verify HostedCluster is created with Cincinnati-resolved image
  • Integration test: verify failure condition when version is not found in Cincinnati

🤖 Generated with Claude Code

@cristianoveiga cristianoveiga force-pushed the GCP-566 branch 5 times, most recently from 5a8028f to e1da014 Compare April 8, 2026 16:53
…ration

Implement OCP version resolution via Cincinnati update service so that
clusters are created with the correct release image without hardcoding it.

- Add Cincinnati client (internal/cincinnati/) to resolve versions to
  release image pullspecs
- Add version resolution controller Helm chart with Pub/Sub, RBAC, and
  GCP Config Connector resources
- Expose cluster status in template context (.cluster.status) so
  templates can read resolved images from controller status
- Add GetClusterStatus to SDK to fetch individual controller statuses
  from GET /clusters/:id/status endpoint
- Enrich cluster with controller statuses before precondition evaluation
  and template rendering
- Support status-only controllers (zero resources) for version resolution
- Add precondition on HC templating controller to wait for version
  resolution before creating HostedCluster
- Update HostedCluster and NodePool templates to read release image from
  version resolution controller status instead of hardcoding

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
cristianoveiga and others added 7 commits April 8, 2026 17:33
GCP service account IDs have a maximum length of 30 characters.
"cls-version-resolution-controller" (31 chars) was exceeding this limit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The CAPI provider GCP (CAPG) fails with v1beta2 CRDs that are not yet
installed. Add a configurable annotation to pin the CAPG image to a
v1beta1-compatible version until v2 CRDs are available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Derive the full Cincinnati channel name (e.g., "candidate-4.22") from
the version and channel group, store it as release_channel metadata,
and set it on the HostedCluster spec.channel so the CVO can check for
available updates.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…erivation

ResolveVersion already derives the Cincinnati channel internally. Return
it as a second value instead of re-deriving it in the controller.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The nodepool event handler fetches the parent cluster but was not
calling enrichClusterWithControllerStatuses, causing templates that
reference controller_statuses (e.g., release_image) to fail with
"index of untyped nil".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Console operator fails to deploy with OIDC authentication due to
missing OIDC client registration. Disabling until root cause is
resolved. See GCP-415.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ingress requires LB configuration, DNS integration and network
connectivity validation before enabling. See GCP-314.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cristianoveiga cristianoveiga marked this pull request as ready for review April 13, 2026 15:01
Copy link
Copy Markdown
Owner

@apahim apahim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@apahim apahim merged commit 2e53ad7 into apahim:main Apr 13, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants