Skip to content

Gate platform operations on usable HCO and HyperShift #18

Description

@caxu-rh

Problem

GuestCluster creates CDI and KubeVirt resources for CRC instances. It creates HyperShift HostedCluster and NodePool resources for HCP instances, with KubeVirt workers. The controller starts those operations without confirming that their platform operands can serve them. A missing provider CRD, missing singleton CR, degraded HCO, disabled HyperShift component, or unavailable HyperShift API produces opaque reconciliation errors.

The current cluster exposes a second failure mode: MultiClusterEngine/engine remains Progressing and Available=False, even though its MCE 2.17.2 CSV installed, the HyperShift operator has two ready replicas, the HostedCluster and NodePool CRDs are established, and the existing GuestCluster HostedCluster is Available=True.

MCE marks its local-cluster unavailable because the registration lease stopped on 2026-08-19. Its Klusterlet identifies as caxu-virt and connects to https://api.eng.opdev.io:6443; MCE expects local-cluster on https://api.caxu-virt.opdev.io:6443. The aggregate MCE phase therefore does not describe whether GuestCluster can create HCP resources.

Scope

  • Gate CRC provisioning and CRC Ready-state KubeVirt checks on a healthy singleton HyperConverged.
  • Gate HCP provisioning on HCO plus usable HyperShift services from MCE.
  • Keep CRCBundle reconciliation, ClusterPool reconciliation, ClusterLease reconciliation, HCP lease projection, and deletion paths available when a dependency has problems.

Proposed Work

  • List HCO and MCE CRs through unstructured clients so the operator starts when either provider CRD is absent.
  • Require one HCO CR with fresh status, Available=True, Progressing=False, and Degraded=False.
  • Require one MCE CR with its hypershift component enabled, established HostedCluster and NodePool APIs, and an available hypershift/operator Deployment. Treat MCE phase=Progressing as diagnostic data, not a blocker.
  • Run checks before CRC creates CDI or KubeVirt resources and before HCP creates its namespace, secrets, HostedCluster, or NodePool. Keep deletion outside these gates.
  • Publish HyperConvergedReady and MultiClusterEngineReady conditions on ClusterInstance. Include APIUnavailable, OperandNotFound, MultipleOperandsFound, StatusStale, OperandNotReady, and ComponentDisabled reasons.
  • Mark blocked instances as PhaseProvisioning and Ready=False, then requeue after 20 seconds without a controller error.
  • Add read-only RBAC for HyperConverged and MultiClusterEngine resources. Avoid provider CR watches because missing CRDs can stop manager startup.
  • Add focused tests for missing APIs and operands, readiness states, HCP and CRC isolation, recovery, no-side-effect blocking, and deletion bypass.

Acceptance Criteria

  • CRC instances continue when MCE is absent or its aggregate phase is Progressing.
  • HCP instances start when HCO and HyperShift services are usable, even if MCE aggregate status remains stale due to an unrelated local-cluster lease.
  • The status condition tells the cluster administrator which dependency needs action before the controller creates provider resources.
  • CRCBundles continue when HCO or MCE has problems.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions