diff --git a/pkg/cvo/cvo_scenarios_test.go b/pkg/cvo/cvo_scenarios_test.go index db07f9f979..80ab8653a1 100644 --- a/pkg/cvo/cvo_scenarios_test.go +++ b/pkg/cvo/cvo_scenarios_test.go @@ -29,6 +29,7 @@ import ( "github.com/openshift/library-go/pkg/manifest" "github.com/openshift/cluster-version-operator/pkg/featuregates" + "github.com/openshift/cluster-version-operator/pkg/internal" "github.com/openshift/cluster-version-operator/pkg/payload" "github.com/openshift/cluster-version-operator/pkg/payload/precondition" ) @@ -184,10 +185,10 @@ func TestCVO_StartupAndSync(t *testing.T) { // empty because the operator release image is not set, so we have no input }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // report back to the user that we don't have enough info to proceed - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "Unable to apply : an unknown error has occurred: NoDesiredImage"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -233,13 +234,13 @@ func TestCVO_StartupAndSync(t *testing.T) { KnownCapabilities: sortedKnownCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // cleared failing status and set progressing - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -414,12 +415,12 @@ func TestCVO_StartupAndSync(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:1", Version: "1.0.0-abc", StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -601,10 +602,10 @@ func TestCVO_StartupAndSyncUnverifiedPayload(t *testing.T) { // empty because the operator release image is not set, so we have no input }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // report back to the user that we don't have enough info to proceed - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "Unable to apply : an unknown error has occurred: NoDesiredImage"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -650,13 +651,13 @@ func TestCVO_StartupAndSyncUnverifiedPayload(t *testing.T) { EnabledCapabilities: sortedCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // cleared failing status and set progressing - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -820,12 +821,12 @@ func TestCVO_StartupAndSyncUnverifiedPayload(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:1", Version: "1.0.0-abc", StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime, AcceptedRisks: "The update cannot be verified: some random error"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -1005,10 +1006,10 @@ func TestCVO_StartupAndSyncPreconditionFailing(t *testing.T) { // empty because the operator release image is not set, so we have no input }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // report back to the user that we don't have enough info to proceed - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "No configured operator version, unable to update cluster"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "NoDesiredImage", Message: "Unable to apply : an unknown error has occurred: NoDesiredImage"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1054,13 +1055,13 @@ func TestCVO_StartupAndSyncPreconditionFailing(t *testing.T) { KnownCapabilities: sortedKnownCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, // cleared failing status and set progressing - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -1219,12 +1220,12 @@ func TestCVO_StartupAndSyncPreconditionFailing(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:1", Version: "1.0.0-abc", StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -1469,8 +1470,8 @@ func TestCVO_UpgradeUnverifiedPayload(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", Message: "Retrieving payload failed version=\"1.0.1-abc\" image=\"image/image:1\" failure=The update cannot be verified: some random error"}, {Type: "Available", Status: "False"}, {Type: "Failing", Status: "False"}, @@ -1600,11 +1601,11 @@ func TestCVO_UpgradeUnverifiedPayload(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.1-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1728,8 +1729,8 @@ func TestCVO_ResetPayloadLoadStatus(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", Message: "Retrieving payload failed version=\"1.0.1-abc\" image=\"image/image:1\" failure=The update cannot be verified: some random error"}, {Type: "Available", Status: "False"}, {Type: "Failing", Status: "False"}, @@ -1847,8 +1848,8 @@ func TestCVO_ResetPayloadLoadStatus(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:0\""}, {Type: "Available", Status: "False"}, {Type: "Failing", Status: "False"}, @@ -2130,8 +2131,8 @@ func TestCVO_InitImplicitlyEnabledCaps(t *testing.T) { KnownCapabilities: sortedKnownCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: configv1.ConditionTrue, Reason: "CapabilitiesImplicitlyEnabled", Message: "The following capabilities could not be disabled: Build, CSISnapshot, CloudControllerManager, CloudCredential, Console, DeploymentConfig, ImageRegistry, Ingress, Insights, MachineAPI, NodeTuning, OperatorLifecycleManager, OperatorLifecycleManagerV1, Storage, marketplace, openshift-samples"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ImplicitlyEnabledCapabilities, Status: configv1.ConditionTrue, Reason: "CapabilitiesImplicitlyEnabled", Message: "The following capabilities could not be disabled: Build, CSISnapshot, CloudControllerManager, CloudCredential, Console, DeploymentConfig, ImageRegistry, Ingress, Insights, MachineAPI, NodeTuning, OperatorLifecycleManager, OperatorLifecycleManagerV1, Storage, marketplace, openshift-samples"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.1-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, {Type: "Available", Status: "False"}, {Type: "Failing", Status: "False"}, @@ -2171,9 +2172,9 @@ func TestCVO_UpgradeUnverifiedPayloadRetrieveOnce(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2262,13 +2263,13 @@ func TestCVO_UpgradeUnverifiedPayloadRetrieveOnce(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, // cleared failing status and set progressing - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 1.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionFalse, Reason: "RetrievePayload", Message: "Retrieving payload failed version=\"1.0.1-abc\" image=\"image/image:1\" failure=The update cannot be verified: some random error"}, }, }, @@ -2395,12 +2396,12 @@ func TestCVO_UpgradeUnverifiedPayloadRetrieveOnce(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.1-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -2469,9 +2470,9 @@ func TestCVO_UpgradePreconditionFailing(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2703,12 +2704,12 @@ func TestCVO_UpgradePreconditionFailing(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.1-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -2744,9 +2745,9 @@ func TestCVO_UpgradePreconditionFailingAcceptedRisks(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2891,9 +2892,9 @@ func TestCVO_UpgradePayloadStillInitializing(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2947,12 +2948,12 @@ func TestCVO_UpgradePayloadStillInitializing(t *testing.T) { KnownCapabilities: sortedKnownCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: `Payload loaded version="1.0.0-abc" image="image/image:0" architecture="` + architecture + `"`}, }, }, @@ -2992,9 +2993,9 @@ func TestCVO_UpgradeVerifiedPayload(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -3050,13 +3051,13 @@ func TestCVO_UpgradeVerifiedPayload(t *testing.T) { KnownCapabilities: sortedKnownCaps, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, // set progressing {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 1.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.1-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -3105,9 +3106,9 @@ func TestCVO_RestartAndReconcile(t *testing.T) { {State: configv1.PartialUpdate, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -3410,9 +3411,9 @@ func TestCVO_ErrorDuringReconcile(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:1", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -3639,12 +3640,12 @@ func TestCVO_ErrorDuringReconcile(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:1", Version: "1.0.0-abc", Verified: true, StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadFailed", Message: "Could not update test \"file-yml\" (3 of 3)"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadFailed", Message: "Could not update test \"file-yml\" (3 of 3)"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "UpdatePayloadFailed", Message: "Error while reconciling 1.0.0-abc: the update could not be applied"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, }, }, @@ -3847,11 +3848,11 @@ func TestCVO_ParallelError(t *testing.T) { {State: configv1.PartialUpdate, Image: "image/image:1", Version: "1.0.0-abc", StartedTime: defaultStartedTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, - {Type: DesiredReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: "PayloadLoaded", Message: "Payload loaded version=\"1.0.0-abc\" image=\"image/image:1\" architecture=\"" + architecture + "\""}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "Failed to reconcile 20-b-file resource"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "Failed to reconcile 20-b-file resource"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Unable to apply 1.0.0-abc: an unknown error has occurred: MultipleErrors"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -3893,9 +3894,9 @@ func TestCVO_VerifyInitializingPayloadState(t *testing.T) { {State: configv1.PartialUpdate, Image: "image/image:1", Version: "1.0.0-abc", StartedTime: defaultStartedTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -3954,9 +3955,9 @@ func TestCVO_VerifyUpdatingPayloadState(t *testing.T) { {State: configv1.CompletedUpdate, Image: "image/image:0", Version: "1.0.0-abc.0", StartedTime: defaultStartedTime, CompletionTime: &defaultCompletionTime}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 1.0.0-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 1.0.0-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, diff --git a/pkg/cvo/cvo_test.go b/pkg/cvo/cvo_test.go index 98fd414065..b364749859 100644 --- a/pkg/cvo/cvo_test.go +++ b/pkg/cvo/cvo_test.go @@ -45,6 +45,7 @@ import ( "github.com/openshift/library-go/pkg/verify/store/sigstore" "github.com/openshift/cluster-version-operator/pkg/featuregates" + "github.com/openshift/cluster-version-operator/pkg/internal" "github.com/openshift/cluster-version-operator/pkg/payload" ) @@ -223,7 +224,7 @@ func TestOperator_sync(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -254,10 +255,10 @@ func TestOperator_sync(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "Unable to apply 0.0.1-abc: the contents of the update are invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, }, }, }) @@ -298,10 +299,10 @@ func TestOperator_sync(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, }, }, }, @@ -330,10 +331,10 @@ func TestOperator_sync(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "UpdatePayloadIntegrity", Message: "Error while reconciling 0.0.1-abc: the contents of the update are invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, }, }, }) @@ -374,9 +375,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Version: "4.0.1", Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -406,9 +407,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Version: "0.0.1-abc", Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "UpdatePayloadIntegrity", Message: "Error while reconciling 0.0.1-abc: the contents of the update are invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -446,9 +447,9 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -479,9 +480,9 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "foo", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "injected error"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "injected error"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Unable to apply 0.0.1-abc: an error occurred"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -534,9 +535,9 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "file does not exist"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "file does not exist"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Unable to apply 4.0.1: an error occurred"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -604,9 +605,9 @@ func TestOperator_sync(t *testing.T) { Conditions: []configv1.ClusterOperatorStatusCondition{ // the order of progressing in the conditions array is preserved {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Unable to apply 4.0.1: an error occurred"}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "file does not exist"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "file does not exist"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -664,9 +665,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards image/image:v4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -708,9 +709,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Initializing, will work towards image/image:v4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -752,9 +753,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.2", Version: "4.0.2"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.2"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -809,9 +810,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.2"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.2"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -863,9 +864,9 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, // we don't reset the message here until the image is loaded {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, @@ -924,9 +925,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, // we don't reset the message here until the image is loaded {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.2"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, @@ -976,9 +977,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, // we correct the message that was incorrect from the previous state {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1: 334 of 1000 done (33% complete)"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, @@ -1077,9 +1078,9 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, // we correct the message that was incorrect from the previous state {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards image/image:v4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, @@ -1121,9 +1122,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Initializing, will work towards image/image:v4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1154,9 +1155,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, VersionHash: "xyz", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 0.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1207,9 +1208,9 @@ func TestOperator_sync(t *testing.T) { VersionHash: "xyz", ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1276,10 +1277,10 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1323,10 +1324,10 @@ func TestOperator_sync(t *testing.T) { }, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionTrue}, }, }, @@ -1349,9 +1350,9 @@ func TestOperator_sync(t *testing.T) { name: "default", upgradeable: &upgradeable{ Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: configv1.ClusterStatusConditionType("Upgradeable"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableA"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableB"), Status: configv1.ConditionFalse}, + {Type: "Upgradeable", Status: configv1.ConditionFalse}, + {Type: "UpgradeableA", Status: configv1.ConditionFalse}, + {Type: "UpgradeableB", Status: configv1.ConditionFalse}, }, }, client: fakeClientsetWithUpdates(&configv1.ClusterVersion{ @@ -1367,10 +1368,10 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1400,14 +1401,14 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("Upgradeable"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableA"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableB"), Status: configv1.ConditionFalse}, + {Type: "Upgradeable", Status: configv1.ConditionFalse}, + {Type: "UpgradeableA", Status: configv1.ConditionFalse}, + {Type: "UpgradeableB", Status: configv1.ConditionFalse}, }, }, }) @@ -1429,8 +1430,8 @@ func TestOperator_sync(t *testing.T) { name: "default", upgradeable: &upgradeable{ Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: configv1.ClusterStatusConditionType("Upgradeable"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableB"), Status: configv1.ConditionFalse}, + {Type: "Upgradeable", Status: configv1.ConditionFalse}, + {Type: "UpgradeableB", Status: configv1.ConditionFalse}, }, }, client: fakeClientsetWithUpdates(&configv1.ClusterVersion{ @@ -1446,12 +1447,12 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableA"), Status: configv1.ConditionFalse}, + {Type: "UpgradeableA", Status: configv1.ConditionFalse}, }, }, }), @@ -1480,13 +1481,13 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("Upgradeable"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableB"), Status: configv1.ConditionFalse}, + {Type: "Upgradeable", Status: configv1.ConditionFalse}, + {Type: "UpgradeableB", Status: configv1.ConditionFalse}, }, }, }) @@ -1522,14 +1523,14 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("Upgradeable"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableA"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("UpgradeableB"), Status: configv1.ConditionFalse}, + {Type: "Upgradeable", Status: configv1.ConditionFalse}, + {Type: "UpgradeableA", Status: configv1.ConditionFalse}, + {Type: "UpgradeableB", Status: configv1.ConditionFalse}, }, }, }), @@ -1558,10 +1559,10 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1608,10 +1609,10 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1645,10 +1646,10 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionTrue}, }, }, @@ -1694,10 +1695,10 @@ func TestOperator_sync(t *testing.T) { Status: configv1.ClusterVersionStatus{ ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1727,10 +1728,10 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "0.0.1-abc"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, }, @@ -1792,9 +1793,9 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1", Version: "4.0.1"}, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1867,10 +1868,10 @@ func TestOperator_sync(t *testing.T) { }, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid: spec.desiredUpdate.version: Invalid value: \"4.0.4\": when image is empty the update must be an available update"}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid: spec.desiredUpdate.version: Invalid value: \"4.0.4\": when image is empty the update must be an available update"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "InvalidClusterVersion", Message: "Stopped at 4.0.1: the cluster version is invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -1945,10 +1946,10 @@ func TestOperator_sync(t *testing.T) { {Version: "4.0.3", Image: "test/image:3"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid: spec.desiredUpdate.version: Invalid value: \"4.0.3\": there are multiple possible payloads for this version, specify the exact image"}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid: spec.desiredUpdate.version: Invalid value: \"4.0.3\": there are multiple possible payloads for this version, specify the exact image"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "InvalidClusterVersion", Message: "Stopped at 4.0.1: the cluster version is invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2000,9 +2001,9 @@ func TestOperator_sync(t *testing.T) { VersionHash: "y_Kc5IQiIyU=", ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2063,9 +2064,9 @@ func TestOperator_sync(t *testing.T) { VersionHash: "unknown_hash", ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2103,9 +2104,9 @@ func TestOperator_sync(t *testing.T) { ObservedGeneration: 2, VersionHash: "y_Kc5IQiIyU=", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Message: "Cluster version is 0.0.1-abc"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2166,10 +2167,10 @@ func TestOperator_sync(t *testing.T) { }, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying 0.0.1-abc"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "InvalidClusterVersion", Message: "Stopped at 0.0.1-abc: the cluster version is invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, }, @@ -2206,12 +2207,12 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse, Reason: "InvalidClusterVersion", Message: "Stopped at image/image:v4.0.1: the cluster version is invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, + {Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, }, }, }), @@ -2246,12 +2247,12 @@ func TestOperator_sync(t *testing.T) { Desired: configv1.Release{Version: "0.0.1-abc", Image: "image/image:v4.0.1"}, VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "Reconciling 0.0.1-abc: the cluster version is invalid"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, - {Type: ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, + {Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: "InvalidClusterVersion", Message: "The cluster version is invalid:\n* spec.upstream: Invalid value: \"#%GG\": must be a valid URL or empty\n* spec.clusterID: Invalid value: \"not-valid-cluster-id\": must be an RFC4122-variant UUID\n"}, }, }, }) @@ -2479,9 +2480,9 @@ func TestOperator_availableUpdatesSync(t *testing.T) { {Image: "image/image:v4.0.1"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying image/image:v4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse}, }, }, @@ -2542,9 +2543,9 @@ func TestOperator_availableUpdatesSync(t *testing.T) { {Image: "image/image:v4.0.1"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying image/image:v4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse, Reason: "RemoteFailed", Message: "Unable to retrieve available updates: unexpected HTTP status: 500 Internal Server Error"}, }, @@ -2609,9 +2610,9 @@ func TestOperator_availableUpdatesSync(t *testing.T) { {Image: "image/image:v4.0.1"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying image/image:v4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse, Reason: "RemoteFailed", Message: "Unable to retrieve available updates: unexpected HTTP status: 500 Internal Server Error"}, }, @@ -2671,9 +2672,9 @@ func TestOperator_availableUpdatesSync(t *testing.T) { }, ObservedGeneration: 2, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying image/image:v4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse, Reason: "RemoteFailed", Message: "Unable to retrieve available updates: unexpected HTTP status: 500 Internal Server Error"}, }, @@ -2711,9 +2712,9 @@ func TestOperator_availableUpdatesSync(t *testing.T) { {Image: "image/image:v4.0.1"}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, + {Type: internal.ImplicitlyEnabledCapabilities, Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue, Message: "Done applying image/image:v4.0.1"}, - {Type: ClusterStatusFailing, Status: configv1.ConditionFalse}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionFalse}, }, }, diff --git a/pkg/cvo/metrics.go b/pkg/cvo/metrics.go index 202af08943..3962418c91 100644 --- a/pkg/cvo/metrics.go +++ b/pkg/cvo/metrics.go @@ -518,7 +518,7 @@ func (m *operatorMetrics) Collect(ch chan<- prometheus.Metric) { } // answers "if we are failing, are we updating or reconciling" - failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, ClusterStatusFailing) + failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ClusterStatusFailing) if failing != nil && failing.Status == configv1.ConditionTrue { if update := cv.Spec.DesiredUpdate; update != nil && update.Image != current.Image { g = m.version.WithLabelValues("failure", update.Version, update.Image, completed.Version) diff --git a/pkg/cvo/metrics_test.go b/pkg/cvo/metrics_test.go index 085b92bdd4..6392ed5a46 100644 --- a/pkg/cvo/metrics_test.go +++ b/pkg/cvo/metrics_test.go @@ -22,6 +22,8 @@ import ( "k8s.io/client-go/tools/record" configv1 "github.com/openshift/api/config/v1" + + "github.com/openshift/cluster-version-operator/pkg/internal" ) func Test_operatorMetrics_Collect(t *testing.T) { @@ -329,8 +331,8 @@ func Test_operatorMetrics_Collect(t *testing.T) { Status: configv1.ClusterOperatorStatus{ Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue}, - {Type: configv1.ClusterStatusConditionType("Custom"), Status: configv1.ConditionFalse, Reason: "CustomReason"}, - {Type: configv1.ClusterStatusConditionType("Unknown"), Status: configv1.ConditionUnknown}, + {Type: "Custom", Status: configv1.ConditionFalse, Reason: "CustomReason"}, + {Type: "Unknown", Status: configv1.ConditionUnknown}, }, }, }, @@ -479,7 +481,7 @@ func Test_operatorMetrics_Collect(t *testing.T) { {State: configv1.CompletedUpdate, Version: "0.0.2", Image: "test/image:1", CompletionTime: &([]metav1.Time{{Time: time.Unix(2, 0)}}[0])}, }, Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, LastTransitionTime: metav1.Time{Time: time.Unix(4, 0)}, Reason: "Because stuff"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, LastTransitionTime: metav1.Time{Time: time.Unix(4, 0)}, Reason: "Because stuff"}, }, }, }, @@ -517,7 +519,7 @@ func Test_operatorMetrics_Collect(t *testing.T) { }, Status: configv1.ClusterVersionStatus{ Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "Because stuff"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "Because stuff"}, }, }, }, @@ -717,7 +719,7 @@ func Test_operatorMetrics_CollectTransitions(t *testing.T) { Status: configv1.ClusterOperatorStatus{ Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionTrue}, - {Type: configv1.ClusterStatusConditionType("Custom"), Status: configv1.ConditionFalse}, + {Type: "Custom", Status: configv1.ConditionFalse}, }, }, }, @@ -726,8 +728,8 @@ func Test_operatorMetrics_CollectTransitions(t *testing.T) { Status: configv1.ClusterOperatorStatus{ Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("Custom"), Status: configv1.ConditionFalse}, - {Type: configv1.ClusterStatusConditionType("Unknown"), Status: configv1.ConditionUnknown}, + {Type: "Custom", Status: configv1.ConditionFalse}, + {Type: "Unknown", Status: configv1.ConditionUnknown}, }, }, }, @@ -735,8 +737,8 @@ func Test_operatorMetrics_CollectTransitions(t *testing.T) { ObjectMeta: metav1.ObjectMeta{Name: "test"}, Status: configv1.ClusterOperatorStatus{ Conditions: []configv1.ClusterOperatorStatusCondition{ - {Type: configv1.ClusterStatusConditionType("Custom"), Status: configv1.ConditionTrue}, - {Type: configv1.ClusterStatusConditionType("Unknown"), Status: configv1.ConditionTrue}, + {Type: "Custom", Status: configv1.ConditionTrue}, + {Type: "Unknown", Status: configv1.ConditionTrue}, }, }, }, diff --git a/pkg/cvo/status.go b/pkg/cvo/status.go index fb9e0cff75..4d524bedbc 100644 --- a/pkg/cvo/status.go +++ b/pkg/cvo/status.go @@ -24,15 +24,11 @@ import ( "github.com/openshift/cluster-version-operator/lib/resourcemerge" "github.com/openshift/cluster-version-operator/pkg/featuregates" + "github.com/openshift/cluster-version-operator/pkg/internal" "github.com/openshift/cluster-version-operator/pkg/payload" ) const ( - // ClusterStatusFailing is set on the ClusterVersion status when a cluster - // cannot reach the desired state. It is considered more serious than Degraded - // and indicates the cluster is not healthy. - ClusterStatusFailing = configv1.ClusterStatusConditionType("Failing") - // ConditionalUpdateConditionTypeRecommended is a type of the condition present on a conditional update // that indicates whether the conditional update is recommended or not ConditionalUpdateConditionTypeRecommended = "Recommended" @@ -159,21 +155,6 @@ func mergeOperatorHistory(cvStatus *configv1.ClusterVersionStatus, desired confi cvStatus.Desired = desired } -// ClusterVersionInvalid indicates that the cluster version has an error that prevents the server from -// taking action. The cluster version operator will only reconcile the current state as long as this -// condition is set. -const ClusterVersionInvalid configv1.ClusterStatusConditionType = "Invalid" - -// DesiredReleaseAccepted indicates whether the requested (desired) release payload was successfully loaded -// and no failures occurred during image verification and precondition checking. -const DesiredReleaseAccepted configv1.ClusterStatusConditionType = "ReleaseAccepted" - -// ImplicitlyEnabledCapabilities is True if there are enabled capabilities which the user is not currently -// requesting via spec.capabilities, because the cluster version operator does not support uninstalling -// capabilities if any associated resources were previously managed by the CVO or disabling previously -// enabled capabilities. -const ImplicitlyEnabledCapabilities configv1.ClusterStatusConditionType = "ImplicitlyEnabledCapabilities" - // syncStatus calculates the new status of the ClusterVersion based on the current sync state and any // validation errors found. We allow the caller to pass the original object to avoid DeepCopying twice. func (optr *Operator) syncStatus(ctx context.Context, original, config *configv1.ClusterVersion, status *SyncWorkerStatus, validationErrs field.ErrorList) error { @@ -265,21 +246,21 @@ func updateClusterVersionStatus(cvStatus *configv1.ClusterVersionStatus, status reason = "InvalidClusterVersion" resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: ClusterVersionInvalid, + Type: internal.ClusterVersionInvalid, Status: configv1.ConditionTrue, Reason: reason, Message: buf.String(), LastTransitionTime: now, }) } else { - resourcemerge.RemoveOperatorStatusCondition(&cvStatus.Conditions, ClusterVersionInvalid) + resourcemerge.RemoveOperatorStatusCondition(&cvStatus.Conditions, internal.ClusterVersionInvalid) } // set the implicitly enabled capabilities condition setImplicitlyEnabledCapabilitiesCondition(cvStatus, status.CapabilitiesStatus.ImplicitlyEnabledCaps, now) - // set the desired release accepted condition - setDesiredReleaseAcceptedCondition(cvStatus, status.loadPayloadStatus, now) + // set the release accepted condition + setReleaseAcceptedCondition(cvStatus, status.loadPayloadStatus, now) // set the available condition if status.Completed > 0 { @@ -318,7 +299,7 @@ func updateClusterVersionStatus(cvStatus *configv1.ClusterVersionStatus, status // set the failing condition failingCondition := configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, LastTransitionTime: now, } @@ -482,7 +463,7 @@ func setImplicitlyEnabledCapabilitiesCondition(cvStatus *configv1.ClusterVersion message = message + strings.Join([]string(caps), ", ") resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: ImplicitlyEnabledCapabilities, + Type: internal.ImplicitlyEnabledCapabilities, Status: configv1.ConditionTrue, Reason: "CapabilitiesImplicitlyEnabled", Message: message, @@ -490,7 +471,7 @@ func setImplicitlyEnabledCapabilitiesCondition(cvStatus *configv1.ClusterVersion }) } else { resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: ImplicitlyEnabledCapabilities, + Type: internal.ImplicitlyEnabledCapabilities, Status: configv1.ConditionFalse, Reason: "AsExpected", Message: "Capabilities match configured spec", @@ -499,10 +480,10 @@ func setImplicitlyEnabledCapabilitiesCondition(cvStatus *configv1.ClusterVersion } } -func setDesiredReleaseAcceptedCondition(cvStatus *configv1.ClusterVersionStatus, status LoadPayloadStatus, now metav1.Time) { +func setReleaseAcceptedCondition(cvStatus *configv1.ClusterVersionStatus, status LoadPayloadStatus, now metav1.Time) { if status.Step == "PayloadLoaded" { resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: DesiredReleaseAccepted, + Type: internal.ReleaseAccepted, Status: configv1.ConditionTrue, Reason: status.Step, Message: status.Message, @@ -511,7 +492,7 @@ func setDesiredReleaseAcceptedCondition(cvStatus *configv1.ClusterVersionStatus, } else if status.Step != "" { if status.Failure != nil { resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: DesiredReleaseAccepted, + Type: internal.ReleaseAccepted, Status: configv1.ConditionFalse, Reason: status.Step, Message: status.Message, @@ -519,7 +500,7 @@ func setDesiredReleaseAcceptedCondition(cvStatus *configv1.ClusterVersionStatus, }) } else { resourcemerge.SetOperatorStatusCondition(&cvStatus.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: DesiredReleaseAccepted, + Type: internal.ReleaseAccepted, Status: configv1.ConditionUnknown, Reason: status.Step, Message: status.Message, @@ -644,7 +625,7 @@ func (optr *Operator) syncFailingStatus(ctx context.Context, original *configv1. // reset the failing message resourcemerge.SetOperatorStatusCondition(&config.Status.Conditions, configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: ierr.Error(), LastTransitionTime: now, diff --git a/pkg/cvo/status_test.go b/pkg/cvo/status_test.go index 2afb1f601a..4ded8b01d9 100644 --- a/pkg/cvo/status_test.go +++ b/pkg/cvo/status_test.go @@ -3,6 +3,7 @@ package cvo import ( "context" "fmt" + "github.com/openshift/cluster-version-operator/pkg/internal" "reflect" "testing" "time" @@ -112,7 +113,7 @@ func TestOperator_syncFailingStatus(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "UpdatePayloadIntegrity", Message: "unable to apply object"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Message: "Working towards 4.0.1"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, {Type: "ImplicitlyEnabledCapabilities", Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, @@ -153,7 +154,7 @@ func TestOperator_syncFailingStatus(t *testing.T) { VersionHash: "", Conditions: []configv1.ClusterOperatorStatusCondition{ {Type: configv1.OperatorAvailable, Status: configv1.ConditionFalse}, - {Type: ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "", Message: "bad"}, + {Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "", Message: "bad"}, {Type: configv1.OperatorProgressing, Status: configv1.ConditionTrue, Reason: "", Message: "Error ensuring the cluster version is up to date: bad"}, {Type: configv1.RetrievedUpdates, Status: configv1.ConditionFalse}, {Type: "ImplicitlyEnabledCapabilities", Status: "False", Reason: "AsExpected", Message: "Capabilities match configured spec"}, @@ -252,7 +253,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, }, }, @@ -264,7 +265,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Message: "error has happened", }, @@ -283,14 +284,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorUpdating", Message: "Cluster operator A is updating", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, }, expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{ @@ -314,14 +315,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorUpdating", Message: "Cluster operator A is updating", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionUnknown, Reason: "SlowClusterOperator", Message: "waiting on co-timeout over 30 minutes which is longer than expected", @@ -347,14 +348,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorUpdating", Message: "Cluster operator A is updating", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, }, expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{ @@ -379,14 +380,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, machineConfigTimeout: true, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorUpdating", Message: "Cluster operator A is updating", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionUnknown, Reason: "SlowClusterOperator", Message: "waiting on machine-config over 90 minutes which is longer than expected", @@ -422,7 +423,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorNotAvailable", Message: "Cluster operators A, B are not available", @@ -452,7 +453,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is degraded", @@ -482,14 +483,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is updating versions", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorNotAvailable", Message: "Cluster operator A is not available", @@ -519,14 +520,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Multiple errors are preventing progress:\n* Cluster operator A is updating versions\n* Cluster operator B is getting conscious", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, }, }, @@ -559,14 +560,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator B is updating versions\n* Cluster operator C is degraded", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "MultipleErrors", Message: "Multiple errors are preventing progress:\n* Cluster operator A is not available\n* Cluster operator C is degraded", @@ -586,14 +587,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorsUpdating", Message: "some-message", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionFalse, }, expectedProgressingCondition: &configv1.ClusterOperatorStatusCondition{ @@ -617,14 +618,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorsUpdating", Message: "some-message", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionUnknown, Reason: "SlowClusterOperator", Message: "waiting on co-timeout over 30 minutes which is longer than expected", @@ -650,14 +651,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, }, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorsUpdating", Message: "some-message", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionUnknown, Reason: "SlowClusterOperator", Message: "waiting on co-timeout, co-bar-timeout over 30 minutes which is longer than expected", @@ -684,14 +685,14 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t }, machineConfigTimeout: true, expectedConditionNotModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionTrue, Reason: "ClusterOperatorsUpdating", Message: "some-message", }, shouldModifyWhenNotReconcilingAndHistoryNotEmpty: true, expectedConditionModified: &configv1.ClusterOperatorStatusCondition{ - Type: ClusterStatusFailing, + Type: internal.ClusterStatusFailing, Status: configv1.ConditionUnknown, Reason: "SlowClusterOperator", Message: "waiting on co-timeout, co-bar-timeout over 30 minutes and machine-config over 90 minutes which is longer than expected", @@ -742,7 +743,7 @@ func TestUpdateClusterVersionStatus_FilteringMultipleErrorsForFailingCondition(t expectedCondition = tc.expectedConditionModified } updateClusterVersionStatus(cvStatus, tc.args.syncWorkerStatus, release, getAvailableUpdates, gates, noErrors) - condition := resourcemerge.FindOperatorStatusCondition(cvStatus.Conditions, ClusterStatusFailing) + condition := resourcemerge.FindOperatorStatusCondition(cvStatus.Conditions, internal.ClusterStatusFailing) if diff := cmp.Diff(expectedCondition, condition, ignoreLastTransitionTime); diff != "" { t.Errorf("unexpected condition when Reconciling == %t && isHistoryEmpty == %t\n:%s", c.isReconciling, c.isHistoryEmpty, diff) } diff --git a/pkg/cvo/upgradeable.go b/pkg/cvo/upgradeable.go index 04bf98e7f9..6d48c36ad6 100644 --- a/pkg/cvo/upgradeable.go +++ b/pkg/cvo/upgradeable.go @@ -27,8 +27,7 @@ import ( ) const ( - adminAckGateFmt string = "^ack-[4-5][.]([0-9]{1,})-[^-]" - upgradeableAdminAckRequired = configv1.ClusterStatusConditionType("UpgradeableAdminAckRequired") + adminAckGateFmt string = "^ack-[4-5][.]([0-9]{1,})-[^-]" ) var adminAckGateRegexp = regexp.MustCompile(adminAckGateFmt) @@ -187,7 +186,7 @@ type clusterOperatorsUpgradeable struct { func (check *clusterOperatorsUpgradeable) Check() *configv1.ClusterOperatorStatusCondition { cond := &configv1.ClusterOperatorStatusCondition{ - Type: configv1.ClusterStatusConditionType("UpgradeableClusterOperators"), + Type: internal.UpgradeableClusterOperators, Status: configv1.ConditionFalse, } ops, err := check.coLister.List(labels.Everything()) @@ -239,7 +238,7 @@ type clusterVersionOverridesUpgradeable struct { func (check *clusterVersionOverridesUpgradeable) Check() *configv1.ClusterOperatorStatusCondition { cond := &configv1.ClusterOperatorStatusCondition{ - Type: configv1.ClusterStatusConditionType("UpgradeableClusterVersionOverrides"), + Type: internal.UpgradeableClusterVersionOverrides, Status: configv1.ConditionFalse, } @@ -270,7 +269,7 @@ type upgradeInProgressUpgradeable struct { func (check *upgradeInProgressUpgradeable) Check() *configv1.ClusterOperatorStatusCondition { cond := &configv1.ClusterOperatorStatusCondition{ - Type: "UpgradeableUpgradeInProgress", + Type: internal.UpgradeableUpgradeInProgress, Status: configv1.ConditionTrue, } @@ -296,7 +295,7 @@ type clusterManifestDeleteInProgressUpgradeable struct { func (check *clusterManifestDeleteInProgressUpgradeable) Check() *configv1.ClusterOperatorStatusCondition { cond := &configv1.ClusterOperatorStatusCondition{ - Type: configv1.ClusterStatusConditionType("UpgradeableDeletesInProgress"), + Type: internal.UpgradeableDeletesInProgress, Status: configv1.ConditionFalse, } if deletes := resourcedelete.DeletesInProgress(); len(deletes) > 0 { @@ -360,7 +359,7 @@ func (check *clusterAdminAcksCompletedUpgradeable) Check() *configv1.ClusterOper message := fmt.Sprintf("Unable to get ClusterVersion, err=%v.", err) klog.Error(message) return &configv1.ClusterOperatorStatusCondition{ - Type: upgradeableAdminAckRequired, + Type: internal.UpgradeableAdminAckRequired, Status: configv1.ConditionFalse, Reason: "UnableToGetClusterVersion", Message: message, @@ -384,7 +383,7 @@ func (check *clusterAdminAcksCompletedUpgradeable) Check() *configv1.ClusterOper } klog.Error(message) return &configv1.ClusterOperatorStatusCondition{ - Type: upgradeableAdminAckRequired, + Type: internal.UpgradeableAdminAckRequired, Status: configv1.ConditionFalse, Reason: "UnableToAccessAdminGatesConfigMap", Message: message, @@ -400,7 +399,7 @@ func (check *clusterAdminAcksCompletedUpgradeable) Check() *configv1.ClusterOper } klog.Error(message) return &configv1.ClusterOperatorStatusCondition{ - Type: upgradeableAdminAckRequired, + Type: internal.UpgradeableAdminAckRequired, Status: configv1.ConditionFalse, Reason: "UnableToAccessAdminAcksConfigMap", Message: message, @@ -421,7 +420,7 @@ func (check *clusterAdminAcksCompletedUpgradeable) Check() *configv1.ClusterOper } if len(reasons) == 1 { return &configv1.ClusterOperatorStatusCondition{ - Type: upgradeableAdminAckRequired, + Type: internal.UpgradeableAdminAckRequired, Status: configv1.ConditionFalse, Reason: reason, Message: messages[0], @@ -429,7 +428,7 @@ func (check *clusterAdminAcksCompletedUpgradeable) Check() *configv1.ClusterOper } else if len(reasons) > 1 { sort.Strings(messages) return &configv1.ClusterOperatorStatusCondition{ - Type: upgradeableAdminAckRequired, + Type: internal.UpgradeableAdminAckRequired, Status: configv1.ConditionFalse, Reason: "MultipleReasons", Message: strings.Join(messages, " "), @@ -531,7 +530,7 @@ func (optr *Operator) adminGatesEventHandler() cache.ResourceEventHandler { // // The cv parameter is expected to be non-nil. func (intervals *upgradeableCheckIntervals) throttlePeriod(cv *configv1.ClusterVersion) time.Duration { - if cond := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, DesiredReleaseAccepted); cond != nil { + if cond := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ReleaseAccepted); cond != nil { deadline := cond.LastTransitionTime.Time.Add(intervals.afterPreconditionsFailed) if cond.Reason == "PreconditionChecks" && cond.Status == configv1.ConditionFalse && time.Now().Before(deadline) { return intervals.minOnFailedPreconditions diff --git a/pkg/cvo/upgradeable_test.go b/pkg/cvo/upgradeable_test.go index d2421aceee..d17840e2be 100644 --- a/pkg/cvo/upgradeable_test.go +++ b/pkg/cvo/upgradeable_test.go @@ -8,6 +8,8 @@ import ( configv1 "github.com/openshift/api/config/v1" "github.com/openshift/client-go/config/clientset/versioned/fake" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/openshift/cluster-version-operator/pkg/internal" ) func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) { @@ -23,18 +25,18 @@ func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) { }, { name: "passing preconditions", - condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionTrue, LastTransitionTime: metav1.Now()}, + condition: &configv1.ClusterOperatorStatusCondition{Type: internal.ReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionTrue, LastTransitionTime: metav1.Now()}, expected: intervals.min, }, { name: "failing but not precondition", - condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "NotPreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()}, + condition: &configv1.ClusterOperatorStatusCondition{Type: internal.ReleaseAccepted, Reason: "NotPreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()}, expected: intervals.min, }, { name: "failing preconditions but too long ago", condition: &configv1.ClusterOperatorStatusCondition{ - Type: DesiredReleaseAccepted, + Type: internal.ReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.NewTime(time.Now().Add(-(intervals.afterPreconditionsFailed + time.Hour))), @@ -43,7 +45,7 @@ func TestUpgradeableCheckIntervalsThrottlePeriod(t *testing.T) { }, { name: "failing preconditions recently", - condition: &configv1.ClusterOperatorStatusCondition{Type: DesiredReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()}, + condition: &configv1.ClusterOperatorStatusCondition{Type: internal.ReleaseAccepted, Reason: "PreconditionChecks", Status: configv1.ConditionFalse, LastTransitionTime: metav1.Now()}, expected: intervals.minOnFailedPreconditions, }, } diff --git a/pkg/internal/constants.go b/pkg/internal/constants.go index 489b92ec82..fa074c9469 100644 --- a/pkg/internal/constants.go +++ b/pkg/internal/constants.go @@ -1,6 +1,10 @@ package internal -import "k8s.io/klog/v2" +import ( + "k8s.io/klog/v2" + + configv1 "github.com/openshift/api/config/v1" +) const ( ConfigNamespace = "openshift-config" @@ -29,3 +33,41 @@ var ( // amounts of logs. In kube, this is probably glog=8. TraceAll klog.Level = 8 ) + +const ( + // ClusterStatusFailing is set on the ClusterVersion status when a cluster + // cannot reach the desired state. It is considered more serious than Degraded + // and indicates the cluster is not healthy. + ClusterStatusFailing configv1.ClusterStatusConditionType = "Failing" + + // ClusterVersionInvalid indicates that the cluster version has an error that prevents the server from + // taking action. The cluster version operator will only reconcile the current state as long as this + // condition is set. + ClusterVersionInvalid configv1.ClusterStatusConditionType = "Invalid" + + // ReleaseAccepted indicates whether the requested (desired) release payload was successfully loaded + // and no failures occurred during image verification and precondition checking. + ReleaseAccepted configv1.ClusterStatusConditionType = "ReleaseAccepted" + + // ImplicitlyEnabledCapabilities is True if there are enabled capabilities which the user is not currently + // requesting via spec.capabilities, because the cluster version operator does not support uninstalling + // capabilities if any associated resources were previously managed by the CVO or disabling previously + // enabled capabilities. + ImplicitlyEnabledCapabilities configv1.ClusterStatusConditionType = "ImplicitlyEnabledCapabilities" + + // UpgradeableAdminAckRequired is False if there is API removed from the Kubernetes API server which requires admin + // consideration, and thus update to the next minor version is blocked. + UpgradeableAdminAckRequired configv1.ClusterStatusConditionType = "UpgradeableAdminAckRequired" + // UpgradeableDeletesInProgress is False if deleting resources is in progress, and thus update to the next minor + // version is blocked. + UpgradeableDeletesInProgress configv1.ClusterStatusConditionType = "UpgradeableDeletesInProgress" + // UpgradeableClusterOperators is False if something is wrong with Cluster Operators, and thus update to the next minor + // version is blocked. + UpgradeableClusterOperators configv1.ClusterStatusConditionType = "UpgradeableClusterOperators" + // UpgradeableClusterVersionOverrides is False if there are overrides in the Cluster Version, and thus update to the next minor + // version is blocked. + UpgradeableClusterVersionOverrides configv1.ClusterStatusConditionType = "UpgradeableClusterVersionOverrides" + + // UpgradeableUpgradeInProgress is True if an update is in progress + UpgradeableUpgradeInProgress configv1.ClusterStatusConditionType = "UpgradeableUpgradeInProgress" +) diff --git a/pkg/payload/precondition/clusterversion/upgradeable.go b/pkg/payload/precondition/clusterversion/upgradeable.go index 4f37547514..83d354ac76 100644 --- a/pkg/payload/precondition/clusterversion/upgradeable.go +++ b/pkg/payload/precondition/clusterversion/upgradeable.go @@ -13,6 +13,7 @@ import ( "k8s.io/klog/v2" "github.com/openshift/cluster-version-operator/lib/resourcemerge" + "github.com/openshift/cluster-version-operator/pkg/internal" "github.com/openshift/cluster-version-operator/pkg/payload/precondition" ) @@ -33,7 +34,7 @@ func ClusterVersionOverridesCondition(cv *configv1.ClusterVersion) *configv1.Clu for _, override := range cv.Spec.Overrides { if override.Unmanaged { condition := configv1.ClusterOperatorStatusCondition{ - Type: configv1.ClusterStatusConditionType("UpgradeableClusterVersionOverrides"), + Type: internal.UpgradeableClusterVersionOverrides, Status: configv1.ConditionFalse, Reason: "ClusterVersionOverridesSet", Message: "Disabling ownership via cluster version overrides prevents upgrades. Please remove overrides before continuing.", diff --git a/pkg/start/start_integration_test.go b/pkg/start/start_integration_test.go index 0a58f7fcb1..be63ebcea5 100644 --- a/pkg/start/start_integration_test.go +++ b/pkg/start/start_integration_test.go @@ -31,6 +31,8 @@ import ( configv1 "github.com/openshift/api/config/v1" clientset "github.com/openshift/client-go/config/clientset/versioned" + "github.com/openshift/cluster-version-operator/pkg/internal" + "github.com/openshift/cluster-version-operator/lib/resourcemerge" "github.com/openshift/cluster-version-operator/pkg/cvo" "github.com/openshift/cluster-version-operator/pkg/payload" @@ -605,7 +607,7 @@ func waitForUpdateAvailable(ctx context.Context, t *testing.T, client clientset. verifyClusterVersionHistory(t, cv) if !allowIncrementalFailure { - if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, cvo.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue { + if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue { return false, fmt.Errorf("operator listed as failing (%s): %s", failing.Reason, failing.Message) } } @@ -676,7 +678,7 @@ func waitForUpdateAvailable(ctx context.Context, t *testing.T, client clientset. return false, nil } - if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, cvo.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue { + if failing := resourcemerge.FindOperatorStatusCondition(cv.Status.Conditions, internal.ClusterStatusFailing); failing != nil && failing.Status == configv1.ConditionTrue { return false, fmt.Errorf("operator listed as failing (%s): %s", failing.Reason, failing.Message) }