Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd keep tests cases only which validate actual behavior constraints. Means that basic CRUD is probably out of scope.

We also need a test for mode: "" as invalid value.

Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this
name: "ClusterVersion"
crdName: clusterversions.config.openshift.io
featureGates:
- ClusterUpdatePreflight
tests:
onCreate:
- name: Should be able to set mode to Preflight
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: Preflight
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: Preflight
- name: Should be able to omit mode field (default behavior)
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
- name: Should be able to use Preflight mode with acceptRisks
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: Preflight
acceptRisks:
- name: RiskA
- name: RiskB
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: Preflight
acceptRisks:
- name: RiskA
- name: RiskB
- name: Invalid mode value should be rejected
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: InvalidMode
expectedError: "Unsupported value: \"InvalidMode\""
- name: Empty mode value should be rejected
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
desiredUpdate:
version: 4.22.0
mode: ""
expectedError: "Unsupported value: \"\""
onUpdate: []
24 changes: 24 additions & 0 deletions config/v1/types_cluster_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -283,6 +283,16 @@ type UpdateHistory struct {
// ClusterID is string RFC4122 uuid.
type ClusterID string

// UpdateModePolicy defines how an update should be processed.
// Valid values are defined as constants below.
// +kubebuilder:validation:Enum=Preflight
Comment on lines 286 to 288
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit nit:

Suggested change
// UpdateModePolicy defines how an update should be processed.
// +kubebuilder:validation:Enum=Preflight
// UpdateModePolicy defines how an update should be processed.
// Valid values are defined as constants below.
// +kubebuilder:validation:Enum=Preflight

type UpdateModePolicy string

const (
// UpdateModePolicyPreflight allows an update to be checked for compatibility without committing to updating the cluster.
UpdateModePolicyPreflight UpdateModePolicy = "Preflight"
)

// ClusterVersionArchitecture enumerates valid cluster architectures.
// +kubebuilder:validation:Enum="Multi";""
type ClusterVersionArchitecture string
Expand Down Expand Up @@ -760,6 +770,20 @@ type Update struct {
// +listMapKey=name
// +optional
AcceptRisks []AcceptRisk `json:"acceptRisks,omitempty"`

// mode determines how an update should be processed.
// The only valid value is "Preflight".
// When omitted, the cluster performs a normal update by applying the specified version or image to the cluster.
// This is the standard update behavior.
// When set to "Preflight", the cluster runs compatibility checks against the target release without
// performing an actual update. The target release's CVO will execute prechecks and report any detected
// risks in status.conditionalUpdates, alongside risks from the update recommendation service.
// This allows administrators to assess update readiness and address issues before committing to the update.
// Preflight mode is particularly useful for skip-level updates where upgrade compatibility needs to be
// verified across multiple minor versions.
// +openshift:enable:FeatureGate=ClusterUpdatePreflight
// +optional
Mode UpdateModePolicy `json:"mode,omitempty"`
}

// AcceptRisk represents a risk that is considered acceptable.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,21 @@ spec:
When image is set, architecture cannot be specified.
If both version and image are set, the version extracted from the referenced image must match the specified version.
type: string
mode:
description: |-
mode determines how an update should be processed.
The only valid value is "Preflight".
When omitted, the cluster performs a normal update by applying the specified version or image to the cluster.
This is the standard update behavior.
When set to "Preflight", the cluster runs compatibility checks against the target release without
performing an actual update. The target release's CVO will execute prechecks and report any detected
risks in status.conditionalUpdates, alongside risks from the update recommendation service.
This allows administrators to assess update readiness and address issues before committing to the update.
Preflight mode is particularly useful for skip-level updates where upgrade compatibility needs to be
verified across multiple minor versions.
enum:
- Preflight
type: string
version:
description: |-
version is a semantic version identifying the update version.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,21 @@ spec:
When image is set, architecture cannot be specified.
If both version and image are set, the version extracted from the referenced image must match the specified version.
type: string
mode:
description: |-
mode determines how an update should be processed.
The only valid value is "Preflight".
When omitted, the cluster performs a normal update by applying the specified version or image to the cluster.
This is the standard update behavior.
When set to "Preflight", the cluster runs compatibility checks against the target release without
performing an actual update. The target release's CVO will execute prechecks and report any detected
risks in status.conditionalUpdates, alongside risks from the update recommendation service.
This allows administrators to assess update readiness and address issues before committing to the update.
Preflight mode is particularly useful for skip-level updates where upgrade compatibility needs to be
verified across multiple minor versions.
enum:
- Preflight
type: string
version:
description: |-
version is a semantic version identifying the update version.
Expand Down
1 change: 1 addition & 0 deletions config/v1/zz_generated.featuregated-crd-manifests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ clusterversions.config.openshift.io:
Category: ""
FeatureGates:
- ClusterUpdateAcceptRisks
- ClusterUpdatePreflight
- ImageStreamImportMode
- SignatureStores
FilenameOperatorName: cluster-version-operator
Expand Down
Loading