From e29c5e0466c8a8368087bf8944d90ab17da95453 Mon Sep 17 00:00:00 2001 From: Lalatendu Mohanty Date: Thu, 26 Sep 2024 14:55:47 -0400 Subject: [PATCH] Remove status.resolution Fixes #1306 Signed-off-by: Lalatendu Mohanty --- api/v1alpha1/clusterextension_types.go | 12 -- api/v1alpha1/zz_generated.deepcopy.go | 21 --- ...peratorframework.io_clusterextensions.yaml | 28 ---- .../api/operator-controller-api-reference.md | 18 --- .../clusterextension_controller.go | 7 - .../clusterextension_controller_test.go | 69 +--------- internal/controllers/common_controller.go | 4 - test/e2e/cluster_extension_install_test.go | 129 +++++------------- test/upgrade-e2e/post_upgrade_test.go | 1 - 9 files changed, 36 insertions(+), 253 deletions(-) diff --git a/api/v1alpha1/clusterextension_types.go b/api/v1alpha1/clusterextension_types.go index 25c0a32b2..b68f7f2a7 100644 --- a/api/v1alpha1/clusterextension_types.go +++ b/api/v1alpha1/clusterextension_types.go @@ -470,8 +470,6 @@ type BundleMetadata struct { type ClusterExtensionStatus struct { Install *ClusterExtensionInstallStatus `json:"install,omitempty"` - Resolution *ClusterExtensionResolutionStatus `json:"resolution,omitempty"` - // conditions is a representation of the current state for this ClusterExtension. // The status is represented by a set of "conditions". // @@ -512,16 +510,6 @@ type ClusterExtensionInstallStatus struct { Bundle BundleMetadata `json:"bundle"` } -type ClusterExtensionResolutionStatus struct { - // bundle is a representation of the bundle that was identified during - // resolution to meet all installation/upgrade constraints and is slated to be - // installed or upgraded to. - // - // A "bundle" is a versioned set of content that represents the resources that - // need to be applied to a cluster to install a package. - Bundle BundleMetadata `json:"bundle"` -} - //+kubebuilder:object:root=true //+kubebuilder:resource:scope=Cluster //+kubebuilder:subresource:status diff --git a/api/v1alpha1/zz_generated.deepcopy.go b/api/v1alpha1/zz_generated.deepcopy.go index ed65d696b..ccd143aec 100644 --- a/api/v1alpha1/zz_generated.deepcopy.go +++ b/api/v1alpha1/zz_generated.deepcopy.go @@ -172,22 +172,6 @@ func (in *ClusterExtensionList) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClusterExtensionResolutionStatus) DeepCopyInto(out *ClusterExtensionResolutionStatus) { - *out = *in - out.Bundle = in.Bundle -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterExtensionResolutionStatus. -func (in *ClusterExtensionResolutionStatus) DeepCopy() *ClusterExtensionResolutionStatus { - if in == nil { - return nil - } - out := new(ClusterExtensionResolutionStatus) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterExtensionSpec) DeepCopyInto(out *ClusterExtensionSpec) { *out = *in @@ -213,11 +197,6 @@ func (in *ClusterExtensionStatus) DeepCopyInto(out *ClusterExtensionStatus) { *out = new(ClusterExtensionInstallStatus) **out = **in } - if in.Resolution != nil { - in, out := &in.Resolution, &out.Resolution - *out = new(ClusterExtensionResolutionStatus) - **out = **in - } if in.Conditions != nil { in, out := &in.Conditions, &out.Conditions *out = make([]v1.Condition, len(*in)) diff --git a/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml b/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml index c25c2ccb2..f24871f00 100644 --- a/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml +++ b/config/base/crd/bases/olm.operatorframework.io_clusterextensions.yaml @@ -572,34 +572,6 @@ spec: required: - bundle type: object - resolution: - properties: - bundle: - description: |- - bundle is a representation of the bundle that was identified during - resolution to meet all installation/upgrade constraints and is slated to be - installed or upgraded to. - - A "bundle" is a versioned set of content that represents the resources that - need to be applied to a cluster to install a package. - properties: - name: - description: |- - name is a required field and is a reference - to the name of a bundle - type: string - version: - description: |- - version is a required field and is a reference - to the version that this bundle represents - type: string - required: - - name - - version - type: object - required: - - bundle - type: object type: object type: object served: true diff --git a/docs/refs/api/operator-controller-api-reference.md b/docs/refs/api/operator-controller-api-reference.md index de0a1f2bd..0c5aced18 100644 --- a/docs/refs/api/operator-controller-api-reference.md +++ b/docs/refs/api/operator-controller-api-reference.md @@ -24,7 +24,6 @@ Package v1alpha1 contains API Schema definitions for the olm v1alpha1 API group _Appears in:_ - [ClusterExtensionInstallStatus](#clusterextensioninstallstatus) -- [ClusterExtensionResolutionStatus](#clusterextensionresolutionstatus) | Field | Description | Default | Validation | | --- | --- | --- | --- | @@ -162,22 +161,6 @@ ClusterExtensionList contains a list of ClusterExtension | `items` _[ClusterExtension](#clusterextension) array_ | | | | -#### ClusterExtensionResolutionStatus - - - - - - - -_Appears in:_ -- [ClusterExtensionStatus](#clusterextensionstatus) - -| Field | Description | Default | Validation | -| --- | --- | --- | --- | -| `bundle` _[BundleMetadata](#bundlemetadata)_ | bundle is a representation of the bundle that was identified during
resolution to meet all installation/upgrade constraints and is slated to be
installed or upgraded to.

A "bundle" is a versioned set of content that represents the resources that
need to be applied to a cluster to install a package. | | | - - #### ClusterExtensionSpec @@ -209,7 +192,6 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `install` _[ClusterExtensionInstallStatus](#clusterextensioninstallstatus)_ | | | | -| `resolution` _[ClusterExtensionResolutionStatus](#clusterextensionresolutionstatus)_ | | | | | `conditions` _[Condition](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.31/#condition-v1-meta) array_ | conditions is a representation of the current state for this ClusterExtension.
The status is represented by a set of "conditions".

Each condition is generally structured in the following format:
- Type: a string representation of the condition type. More or less the condition "name".
- Status: a string representation of the state of the condition. Can be one of ["True", "False", "Unknown"].
- Reason: a string representation of the reason for the current state of the condition. Typically useful for building automation around particular Type+Reason combinations.
- Message: a human readable message that further elaborates on the state of the condition

The global set of condition types are:
- "Installed", represents whether or not the a bundle has been installed for this ClusterExtension
- "Resolved", represents whether or not a bundle was found that satisfies the selection criteria outlined in the spec
- "Unpacked", represents whether or not the bundle contents have been successfully unpacked

When the ClusterExtension is sourced from a catalog, the following conditions are also possible:
- "Deprecated", represents an aggregation of the PackageDeprecated, ChannelDeprecated, and BundleDeprecated condition types
- "PackageDeprecated", represents whether or not the package specified in the spec.source.catalog.packageName field has been deprecated
- "ChannelDeprecated", represents whether or not any channel specified in spec.source.catalog.channels has been deprecated
- "BundleDeprecated", represents whether or not the installed bundle is deprecated

The current set of reasons are:
- "Success", this reason is set on the "Unpacked", "Resolved" and "Installed" conditions when unpacking a bundle's content, resolution and installation/upgrading is successful
- "Failed", this reason is set on the "Unpacked", "Resolved" and "Installed" conditions when an error has occurred while unpacking the contents of a bundle, during resolution or installation. | | | diff --git a/internal/controllers/clusterextension_controller.go b/internal/controllers/clusterextension_controller.go index 399620cd4..22f54619b 100644 --- a/internal/controllers/clusterextension_controller.go +++ b/internal/controllers/clusterextension_controller.go @@ -199,7 +199,6 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp // as much status as possible before returning, or at least keeps previous state if // it is properly labeled with its observed generation. setInstallStatus(ext, nil) - setResolutionStatus(ext, nil) setStatusProgressing(ext, err) ensureAllConditionsWithReason(ext, ocv1alpha1.ReasonFailed, err.Error()) return ctrl.Result{}, err @@ -226,7 +225,6 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp if err != nil { // Note: We don't distinguish between resolution-specific errors and generic errors setInstallStatus(ext, nil) - setResolutionStatus(ext, nil) setStatusProgressing(ext, err) ensureAllConditionsWithReason(ext, ocv1alpha1.ReasonFailed, err.Error()) return ctrl.Result{}, err @@ -249,11 +247,6 @@ func (r *ClusterExtensionReconciler) reconcile(ctx context.Context, ext *ocv1alp SetDeprecationStatus(ext, resolvedBundle.Name, resolvedDeprecation) resolvedBundleMetadata := bundleutil.MetadataFor(resolvedBundle.Name, *resolvedBundleVersion) - resStatus := &ocv1alpha1.ClusterExtensionResolutionStatus{ - Bundle: resolvedBundleMetadata, - } - setResolutionStatus(ext, resStatus) - bundleSource := &rukpaksource.BundleSource{ Name: ext.GetName(), Type: rukpaksource.SourceTypeImage, diff --git a/internal/controllers/clusterextension_controller_test.go b/internal/controllers/clusterextension_controller_test.go index d38404b9c..29156e572 100644 --- a/internal/controllers/clusterextension_controller_test.go +++ b/internal/controllers/clusterextension_controller_test.go @@ -39,61 +39,7 @@ func TestClusterExtensionDoesNotExist(t *testing.T) { require.NoError(t, err) } -func TestClusterExtensionResolutionFails(t *testing.T) { - pkgName := fmt.Sprintf("non-existent-%s", rand.String(6)) - cl, reconciler := newClientAndReconciler(t) - reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { - return nil, nil, nil, fmt.Errorf("no package %q found", pkgName) - }) - ctx := context.Background() - extKey := types.NamespacedName{Name: fmt.Sprintf("cluster-extension-test-%s", rand.String(8))} - - t.Log("When the cluster extension specifies a non-existent package") - t.Log("By initializing cluster state") - clusterExtension := &ocv1alpha1.ClusterExtension{ - ObjectMeta: metav1.ObjectMeta{Name: extKey.Name}, - Spec: ocv1alpha1.ClusterExtensionSpec{ - Source: ocv1alpha1.SourceConfig{ - SourceType: "Catalog", - Catalog: &ocv1alpha1.CatalogSource{ - PackageName: pkgName, - }, - }, - Install: ocv1alpha1.ClusterExtensionInstallConfig{ - Namespace: "default", - ServiceAccount: ocv1alpha1.ServiceAccountReference{ - Name: "default", - }, - }, - }, - } - require.NoError(t, cl.Create(ctx, clusterExtension)) - - t.Log("It sets resolution failure status") - t.Log("By running reconcile") - res, err := reconciler.Reconcile(ctx, ctrl.Request{NamespacedName: extKey}) - require.Equal(t, ctrl.Result{}, res) - require.EqualError(t, err, fmt.Sprintf("no package %q found", pkgName)) - - t.Log("By fetching updated cluster extension after reconcile") - require.NoError(t, cl.Get(ctx, extKey, clusterExtension)) - - t.Log("By checking the status fields") - require.Empty(t, clusterExtension.Status.Resolution) - require.Empty(t, clusterExtension.Status.Install) - - t.Log("By checking the expected conditions") - cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) - require.NotNil(t, cond) - require.Equal(t, metav1.ConditionTrue, cond.Status) - require.Equal(t, ocv1alpha1.ReasonRetrying, cond.Reason) - require.Equal(t, fmt.Sprintf("no package %q found", pkgName), cond.Message) - - verifyInvariants(ctx, t, reconciler.Client, clusterExtension) - require.NoError(t, cl.DeleteAllOf(ctx, &ocv1alpha1.ClusterExtension{})) -} - -func TestClusterExtensionResolutionSuccessfulUnpackFails(t *testing.T) { +func TestClusterExtensionUnpackFails(t *testing.T) { cl, reconciler := newClientAndReconciler(t) reconciler.Unpacker = &MockUnpacker{ err: errors.New("unpack failure"), @@ -132,7 +78,6 @@ func TestClusterExtensionResolutionSuccessfulUnpackFails(t *testing.T) { err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -151,7 +96,6 @@ func TestClusterExtensionResolutionSuccessfulUnpackFails(t *testing.T) { t.Log("By checking the status fields") expectedBundleMetadata := ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"} - require.Equal(t, expectedBundleMetadata, clusterExtension.Status.Resolution.Bundle) require.Empty(t, clusterExtension.Status.Install) t.Log("By checking the expected conditions") @@ -205,7 +149,6 @@ func TestClusterExtensionUnpackUnexpectedState(t *testing.T) { err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -223,7 +166,7 @@ func TestClusterExtensionUnpackUnexpectedState(t *testing.T) { require.NoError(t, cl.DeleteAllOf(ctx, &ocv1alpha1.ClusterExtension{})) } -func TestClusterExtensionResolutionAndUnpackSuccessfulApplierFails(t *testing.T) { +func TestClusterExtensionUnpackSuccessfulApplierFails(t *testing.T) { cl, reconciler := newClientAndReconciler(t) reconciler.Unpacker = &MockUnpacker{ result: &source.Result{ @@ -265,7 +208,6 @@ func TestClusterExtensionResolutionAndUnpackSuccessfulApplierFails(t *testing.T) err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -287,7 +229,6 @@ func TestClusterExtensionResolutionAndUnpackSuccessfulApplierFails(t *testing.T) t.Log("By checking the status fields") expectedBundleMetadata := ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"} - require.Equal(t, expectedBundleMetadata, clusterExtension.Status.Resolution.Bundle) require.Empty(t, clusterExtension.Status.Install) t.Log("By checking the expected installed conditions") @@ -348,7 +289,6 @@ func TestClusterExtensionManagerFailed(t *testing.T) { err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -372,7 +312,6 @@ func TestClusterExtensionManagerFailed(t *testing.T) { require.NoError(t, cl.Get(ctx, extKey, clusterExtension)) t.Log("By checking the status fields") - require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Resolution.Bundle) require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Install.Bundle) t.Log("By checking the expected installed conditions") @@ -433,7 +372,6 @@ func TestClusterExtensionManagedContentCacheWatchFail(t *testing.T) { err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -459,7 +397,6 @@ func TestClusterExtensionManagedContentCacheWatchFail(t *testing.T) { require.NoError(t, cl.Get(ctx, extKey, clusterExtension)) t.Log("By checking the status fields") - require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Resolution.Bundle) require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Install.Bundle) t.Log("By checking the expected installed conditions") @@ -519,7 +456,6 @@ func TestClusterExtensionInstallationSucceeds(t *testing.T) { err := cl.Create(ctx, clusterExtension) require.NoError(t, err) - t.Log("It sets resolution success status") t.Log("By running reconcile") reconciler.Resolver = resolve.Func(func(_ context.Context, _ *ocv1alpha1.ClusterExtension, _ *ocv1alpha1.BundleMetadata) (*declcfg.Bundle, *bsemver.Version, *declcfg.Deprecation, error) { v := bsemver.MustParse("1.0.0") @@ -543,7 +479,6 @@ func TestClusterExtensionInstallationSucceeds(t *testing.T) { require.NoError(t, cl.Get(ctx, extKey, clusterExtension)) t.Log("By checking the status fields") - require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Resolution.Bundle) require.Equal(t, ocv1alpha1.BundleMetadata{Name: "prometheus.v1.0.0", Version: "1.0.0"}, clusterExtension.Status.Install.Bundle) t.Log("By checking the expected installed conditions") diff --git a/internal/controllers/common_controller.go b/internal/controllers/common_controller.go index 1ef5a18cf..8210f3999 100644 --- a/internal/controllers/common_controller.go +++ b/internal/controllers/common_controller.go @@ -48,10 +48,6 @@ func setInstalledStatusConditionFailed(ext *ocv1alpha1.ClusterExtension, message }) } -func setResolutionStatus(ext *ocv1alpha1.ClusterExtension, resStatus *ocv1alpha1.ClusterExtensionResolutionStatus) { - ext.Status.Resolution = resStatus -} - func setInstallStatus(ext *ocv1alpha1.ClusterExtension, installStatus *ocv1alpha1.ClusterExtensionInstallStatus) { ext.Status.Install = installStatus } diff --git a/test/e2e/cluster_extension_install_test.go b/test/e2e/cluster_extension_install_test.go index 351f777f5..d8ebeb0f9 100644 --- a/test/e2e/cluster_extension_install_test.go +++ b/test/e2e/cluster_extension_install_test.go @@ -268,13 +268,13 @@ func TestClusterExtensionInstallRegistry(t *testing.T) { t.Log("By eventually reporting a successful resolution and bundle path") require.EventuallyWithT(t, func(ct *assert.CollectT) { assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: fmt.Sprintf("%s-operator.1.2.0", tc.packageName), - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, metav1.ConditionTrue, cond.Status) + assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) + assert.Contains(ct, cond.Message, "resolved to") }, pollDuration, pollInterval) t.Log("By eventually reporting no longer progressing") @@ -332,7 +332,13 @@ func TestClusterExtensionInstallRegistryMultipleBundles(t *testing.T) { t.Log("By eventually reporting a failed resolution with multiple bundles") require.EventuallyWithT(t, func(ct *assert.CollectT) { assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) - assert.Nil(ct, clusterExtension.Status.Resolution) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, metav1.ConditionFalse, cond.Status) + assert.Equal(ct, ocv1alpha1.ReasonFailed, cond.Reason) + assert.Contains(ct, cond.Message, "in multiple catalogs with the same priority [operatorhubio test-catalog]") }, pollDuration, pollInterval) t.Log("By eventually reporting Progressing == True and Reason Retrying") @@ -377,13 +383,12 @@ func TestClusterExtensionBlockInstallNonSuccessorVersion(t *testing.T) { t.Log("By eventually reporting a successful installation") require.EventuallyWithT(t, func(ct *assert.CollectT) { assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.0.0", - Version: "1.0.0", - }}, - clusterExtension.Status.Resolution, - ) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) + assert.Contains(ct, cond.Message, "resolved to") assert.Equal(ct, &ocv1alpha1.ClusterExtensionInstallStatus{Bundle: ocv1alpha1.BundleMetadata{ Name: "prometheus-operator.1.0.0", @@ -392,7 +397,7 @@ func TestClusterExtensionBlockInstallNonSuccessorVersion(t *testing.T) { clusterExtension.Status.Install, ) - cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + cond = apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) if !assert.NotNil(ct, cond) { return } @@ -408,7 +413,12 @@ func TestClusterExtensionBlockInstallNonSuccessorVersion(t *testing.T) { t.Log("By eventually reporting an unsatisfiable resolution") require.EventuallyWithT(t, func(ct *assert.CollectT) { assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) - assert.Empty(ct, clusterExtension.Status.Resolution) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, ocv1alpha1.ReasonFailed, cond.Reason) + assert.Equal(ct, "error upgrading from currently installed version \"1.0.0\": no bundles found for package \"prometheus\" matching version \"1.2.0\"", cond.Message) }, pollDuration, pollInterval) t.Log("By eventually reporting Progressing == True and Reason Retrying") @@ -457,14 +467,6 @@ func TestClusterExtensionForceInstallNonSuccessorVersion(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.0.0", - Version: "1.0.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) t.Log("It allows to upgrade the ClusterExtension to a non-successor version") @@ -482,14 +484,6 @@ func TestClusterExtensionForceInstallNonSuccessorVersion(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.2.0", - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) } @@ -526,14 +520,6 @@ func TestClusterExtensionInstallSuccessorVersion(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.0.0", - Version: "1.0.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) t.Log("It does allow to upgrade the ClusterExtension to any of the successor versions within non-zero major version") @@ -550,14 +536,6 @@ func TestClusterExtensionInstallSuccessorVersion(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.0.1", - Version: "1.0.1", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) } @@ -604,14 +582,6 @@ func TestClusterExtensionInstallReResolvesWhenCatalogIsPatched(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.2.0", - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) // patch imageRef tag on test-catalog image with v2 image @@ -638,14 +608,6 @@ func TestClusterExtensionInstallReResolvesWhenCatalogIsPatched(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.2.0.0", - Version: "2.0.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) } @@ -704,14 +666,6 @@ func TestClusterExtensionInstallReResolvesWhenNewCatalog(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.2.0", - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) // update tag on test-catalog image with v2 image @@ -738,14 +692,6 @@ func TestClusterExtensionInstallReResolvesWhenNewCatalog(t *testing.T) { } assert.Equal(ct, metav1.ConditionFalse, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) - - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.2.0.0", - Version: "2.0.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) } @@ -787,13 +733,6 @@ func TestClusterExtensionInstallReResolvesWhenManagedContentChanged(t *testing.T assert.Equal(ct, metav1.ConditionTrue, cond.Status) assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) assert.Contains(ct, cond.Message, "Installed bundle") - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.2.0", - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) }, pollDuration, pollInterval) t.Log("By deleting a managed resource") @@ -853,13 +792,13 @@ func TestClusterExtensionRecoversFromInitialInstallFailedWhenFailureFixed(t *tes t.Log("By eventually reporting a successful resolution and bundle path") require.EventuallyWithT(t, func(ct *assert.CollectT) { assert.NoError(ct, c.Get(context.Background(), types.NamespacedName{Name: clusterExtension.Name}, clusterExtension)) - assert.Equal(ct, - &ocv1alpha1.ClusterExtensionResolutionStatus{Bundle: ocv1alpha1.BundleMetadata{ - Name: "prometheus-operator.1.2.0", - Version: "1.2.0", - }}, - clusterExtension.Status.Resolution, - ) + cond := apimeta.FindStatusCondition(clusterExtension.Status.Conditions, ocv1alpha1.TypeProgressing) + if !assert.NotNil(ct, cond) { + return + } + assert.Equal(ct, metav1.ConditionTrue, cond.Status) + assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) + assert.Contains(ct, cond.Message, "resolved to") }, pollDuration, pollInterval) t.Log("By eventually reporting Progressing == True with Reason Retrying") diff --git a/test/upgrade-e2e/post_upgrade_test.go b/test/upgrade-e2e/post_upgrade_test.go index 06f9a31b0..d367d9549 100644 --- a/test/upgrade-e2e/post_upgrade_test.go +++ b/test/upgrade-e2e/post_upgrade_test.go @@ -107,7 +107,6 @@ func TestClusterExtensionAfterOLMUpgrade(t *testing.T) { } assert.Equal(ct, ocv1alpha1.ReasonSuccess, cond.Reason) assert.Contains(ct, cond.Message, "Installed bundle") - assert.Equal(ct, ocv1alpha1.BundleMetadata{Name: "prometheus-operator.1.0.1", Version: "1.0.1"}, clusterExtension.Status.Resolution.Bundle) assert.Equal(ct, ocv1alpha1.BundleMetadata{Name: "prometheus-operator.1.0.1", Version: "1.0.1"}, clusterExtension.Status.Install.Bundle) assert.NotEqual(ct, previousVersion, clusterExtension.Status.Install.Bundle.Version) }, time.Minute, time.Second)