Sylva 1.4.x to 1.6.y upgrade removes SriovNetwork custom resources from the cluster

Summary

Upgrading Sylva from 1.4.17 to 1.6.24 deletes every SriovNetwork custom resource in the cluster.

Affected chart: sriov-crd (from suse-edge-charts, https://suse-edge.github.io/charts/), version bump 1.5.2+up1.5.01.6.4+up1.6.0

Steps to reproduce

Upgrade a cluster that has SRIOV enabled and SriovNetwork CR objects created from 1.4.x to 1.6.y. During the upgrade, the SriovNetwork objects will be deleted because all CRD definitions definded by sriov-crd helm chart will be deleted and recreated.

Relevant logs and root cause

SriovNetwork CRD before the upgrade, in 1.4.17:

$ k get crd  sriovnetworks.sriovnetwork.openshift.io -o yaml | yq .metadata
annotations:
  controller-gen.kubebuilder.io/version: v0.14.0
  meta.helm.sh/release-name: sriov-crd
  meta.helm.sh/release-namespace: cattle-sriov-system
creationTimestamp: "2026-06-08T08:43:07Z"

SriovNetwork after the upgrade, in 1.6.24, in which we can observe it was recreated by the timestamp:

$ k get crd  sriovnetworks.sriovnetwork.openshift.io -o yaml | yq .metadata
annotations:
  controller-gen.kubebuilder.io/version: v0.14.0
  meta.helm.sh/release-name: sriov-crd
  meta.helm.sh/release-namespace: sylva-system
creationTimestamp: "2026-07-02T04:30:04Z"

So namespace of the sriov-crd hr has changed from cattle-sriov-system to sylva-system between Sylva 1.4.x to 1.6.y as part of namespace refactoring MR: !4774 (merged)

$ kubectl get hr -n workload-cluster -o yaml | \
  grep -E "crds|upgrade|install" -A3
  upgrade:
    crds: CreateReplace
  valuesFrom: []
status:
  conditions:
--
    message: Helm install succeeded for release sylva-system/sriov-crd.v1 with chart

Flux will see sylva-system/sriov-crd as a new hr and will delete and recreate all SRIOV related CRDs from sriov-crd hr, which I think will mean to also delete all SriovNetworks present on the cluster.

Because policy for upgrade is:

$ cat charts/sylva-units/values.yaml | yq .unit_helmrelease_spec_default.upgrade
crds: CreateReplace

Possible fixes/workaround - not sure this is the best approach

Set Create instead of CreateReplace for sriov-crd hr to avoid recreation in case CRDs are already there.

units:
  sriov-crd:
    helmrelease_spec:
      upgrade:
        crds: Create
Edited by Vlad Onutu