--- # KubeVirt + CDI — CONTROLLERS half only (the operators). Phase 5 (WS-VM). # # CONTROLLERS/CONFIGS SPLIT (F-MON1 / DECISIONS-LOG): the two operator release manifests below install # the KubeVirt + CDI CONTROLLERS, which REGISTER the `kubevirt.io` (KubeVirt) and `cdi.kubevirt.io` # (CDI) CRDs. The tuning custom resources that CONSUME those CRDs — kubevirt-cr.yaml / cdi-cr.yaml — # live in this directory for locality but are applied by the `platform-config` Flux Kustomization # (dependsOn: platform, wait) so the CRDs exist BEFORE the CRs apply. Applying both in one atomic pass # deadlocks ("no matches for kind KubeVirt"), exactly the failure F-MON1 documents. # # Namespaces: the operator manifests each create their own namespace (`kubevirt`, `cdi`) with the # pod-security profile they need (kubevirt is privileged) — so we do NOT redeclare them here (that # would be a duplicate-resource kustomize error). These are PLATFORM namespaces: they intentionally # carry NO `homelab.keithjackson.dev/app-namespace` label, so the Kyverno default-deny baseline is NOT # generated into them (that would sever the virt control plane). Application VMs live in app namespaces. # # PINNED (Renovate-maintained): bump the two version tags together to a compatible KubeVirt/CDI pair. # KubeVirt v1.9.0 (kubevirt.io/v1) — operator + CRDs # CDI v1.66.0 (cdi.kubevirt.io/v1beta1) — operator + CRDs # Kustomize loads these raw release manifests as remote file resources (verified: `kubectl kustomize` # builds them); Flux's kustomize-controller fetches them the same way at reconcile. apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: # renovate: datasource=github-releases depName=kubevirt/kubevirt - https://github.com/kubevirt/kubevirt/releases/download/v1.9.0/kubevirt-operator.yaml # renovate: datasource=github-releases depName=kubevirt/containerized-data-importer - https://github.com/kubevirt/containerized-data-importer/releases/download/v1.66.0/cdi-operator.yaml