Uploaded image for project: 'OpenShift Bugs'
  1. OpenShift Bugs
  2. OCPBUGS-60693

ClusterExtension upgrade fails with "unhandled changes" error for non-breaking CRD modifications

XMLWordPrintable

    • Quality / Stability / Reliability
    • False
    • Hide

      None

      Show
      None
    • None
    • None
    • None
    • None
    • None
    • Rejected
    • None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      Description of problem:

      OLM v1 ClusterExtension upgrade from RHDH operator 1.6.3 to 1.7.0 fails due to CRD upgrade safety validation blocking "unhandled changes" for additive schema modifications. The validation incorrectly treats the addition of optional fields and description text changes as breaking changes, preventing legitimate upgrades. 

      Version-Release number of selected component (if applicable):

      - OpenShift Container Platform: 4.20.0-0.nightly-2025-08-18-192426
      - OLM v1: olm.operatorframework.io/v1 (GA)
      - RHDH Operator: 1.6.3 → 1.7.0 upgrade path
      - Kubernetes: v1.33.3    

      How reproducible:

      Always - 100% reproducible with RHDH operator upgrade from 1.6.3 to 1.7.0
      

      Steps to Reproduce:

      1. Install RHDH operator 1.6.3 using OLM v1 ClusterExtension:
         ```
         oc apply -f - <<EOF
         apiVersion: olm.operatorframework.io/v1
         kind: ClusterExtension
         metadata:
           name: rhdh-upgrade-test
         spec:
           namespace: rhdh-upgrade-test
           serviceAccount:
             name: rhdh-installer
           source:
             sourceType: Catalog
             catalog:
               packageName: rhdh
               version: "1.6.3"
               channels: [fast-1.6]
         EOF
         ```2. Wait for installation to complete:
         ```
         oc wait --for=condition=Installed=True clusterextension/rhdh-upgrade-test --timeout=600s
         ```3. Attempt upgrade to 1.7.0:
         ```
         oc patch clusterextension rhdh-upgrade-test --type='merge' -p='{
           "spec": {
             "source": {
               "catalog": {
                 "version": "1.7.0",
                 "channels": ["fast-1.7"]
               }
             }
           }
         }'
         ```4. Check upgrade status:
         ```
         oc get clusterextension rhdh-upgrade-test -o jsonpath='{.status.conditions[?(@.type=="Progressing")].message}'
         ```

      Actual results
      Upgrade fails with CRD validation error::

      error for resolved bundle "rhdh-operator.v1.7.0" with version "1.7.0": validating upgrade for CRD "backstages.rhdh.redhat.com": v1alpha1 <-> v1alpha3: ^.spec.application.extraFiles.secrets: unhandled: unhandled changes found :
        &v1.JSONSchemaProps{
              ... // 21 identical fields
              MinProperties: nil,
              Required:      nil,
              Items: &v1.JSONSchemaPropsOrArray{
                      Schema: &v1.JSONSchemaProps{
                              ... // 26 identical fields
                              AnyOf: nil,
                              Not:   nil,
                              Properties: map[string]v1.JSONSchemaProps{
                                      "key": {Description: "Key in the object", Type: "string"},
      +                               "mountPath": {
      +                                       Description: "Path to mount the Object. If not specified default-path/Name will be used",
      +                                       Type:        "string",
      +                               },
                                      "name": {
                                              ID:     "",
                                              Schema: "",
                                              Ref:    nil,
                                              Description: strings.Join({
                                                      "Name of the object\n",
      -                                               "We support only",
      +                                               "Supported",
                                                      " ConfigMaps and Secrets",
      -                                               ".",
                                              }, ""),
                                              Type:   "string",
                                              Format: "",
                                              ... // 38 identical fields
                                      },
                              },
                              AdditionalProperties: nil,
                              PatternProperties:    nil,
                              ... // 13 identical fields
                      },
                      JSONSchemas: nil,
              },
              AllOf: nil,
              OneOf: nil,
              ... // 18 identical fields
        }
      
      v1alpha1 <-> v1alpha3: ^.spec.application.extraFiles.configMaps: unhandled: unhandled changes found :
        &v1.JSONSchemaProps{
              ... // 21 identical fields
              MinProperties: nil,
              Required:      nil,
              Items: &v1.JSONSchemaPropsOrArray{
                      Schema: &v1.JSONSchemaProps{
      

      ClusterExtension remains stuck with:

      • INSTALLED BUNDLE: rhdh-operator.v1.6.3  
      • VERSION: 1.6.3
      • PROGRESSING: True (but stuck in retry loop)

      Expected results:

      Upgrade should succeed since the CRD changes are additive and backward compatible:
      - New `mountPath` field is optional (not required)
      - Description text changes are non-breaking
      - No existing fields were removed or had types changed

      ClusterExtension should show:

      - INSTALLED BUNDLE: rhdh-operator.v1.7.0
      - VERSION: 1.7.0  
      - INSTALLED: True

      Additional info:

      A Workaround exists by disabling CRD upgrade safety checks:https://docs.redhat.com/en/documentation/openshift_container_platform/4.19/html/extensions/cluster-extensions#prohibited-crd-up[…]crd-upgrade-safety,

      oc patch clusterextension rhdh-upgrade-test --type='merge' -p='{
        "spec": {
          "source": {
            "catalog": {
              "version": "1.7.0",
              "channels": ["fast-1.7"]
            }
          },
          "install": {
            "preflight": {
              "crdUpgradeSafety": {
                "enforcement": "None"
              }
            }
          }
        }
      }'
      clusterextension.olm.operatorframework.io/rhdh-upgrade-test patched
      

              rh-ee-cchantse Catherine Chan-Tse
              rh-ee-fndlovu Fortune Ndlovu
              None
              None
              Jian Zhang Jian Zhang
              None
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Created:
                Updated: