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
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this
name: "ClusterVersion"
crdName: clusterversions.config.openshift.io
featureGates:
- CRDCompatibilityRequirementOperator
- ClusterAPIMachineManagement
tests:
onCreate:
- name: Should be able to create a ClusterVersion with base capability None, and additional capabilities ClusterAPI and CompatibilityRequirements
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
- CompatibilityRequirements
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
- CompatibilityRequirements
- name: Should not be able to create a ClusterVersion with base capability None, and additional capability ClusterAPI without CompatibilityRequirements
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
expectedError: the `ClusterAPI` capability requires the `CompatibilityRequirements` capability, which is neither explicitly or implicitly enabled in this cluster, please enable the `CompatibilityRequirements` capability
- name: Should be able to create a ClusterVersion with base capability None, and additional capability CompatibilityRequirements without ClusterAPI
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
onUpdate:
- name: Should be able to add the ClusterAPI capability with CompatibilityRequirements already implicitly enabled
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
status:
desired:
version: foo
image: foo
observedGeneration: 1
versionHash: foo
capabilities:
enabledCapabilities:
- CompatibilityRequirements
availableUpdates:
- version: foo
image: foo
updated: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
status:
desired:
version: foo
image: foo
observedGeneration: 1
versionHash: foo
capabilities:
enabledCapabilities:
- CompatibilityRequirements
availableUpdates:
- version: foo
image: foo
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
status:
desired:
version: foo
image: foo
observedGeneration: 1
versionHash: foo
capabilities:
enabledCapabilities:
- CompatibilityRequirements
availableUpdates:
- version: foo
image: foo
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this
name: "ClusterVersion"
crdName: clusterversions.config.openshift.io
featureGates:
- CRDCompatibilityRequirementOperator
tests:
onCreate:
- name: Should be able to create a ClusterVersion with base capability None, and additional capability CompatibilityRequirements
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this
name: "ClusterVersion"
crdName: clusterversions.config.openshift.io
featureGates:
- ClusterAPIMachineManagement
tests:
onCreate:
- name: Should be able to create a ClusterVersion with base capability None, and additional capabilities ClusterAPI and CompatibilityRequirements
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
- CompatibilityRequirements
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- ClusterAPI
- CompatibilityRequirements
- name: Should be able to create a ClusterVersion with base capability None, and additional capability CompatibilityRequirements without ClusterAPI
initial: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
expected: |
apiVersion: config.openshift.io/v1
kind: ClusterVersion
spec:
clusterID: foo
capabilities:
baselineCapabilitySet: None
additionalEnabledCapabilities:
- CompatibilityRequirements
23 changes: 22 additions & 1 deletion config/v1/types_cluster_version.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
// +kubebuilder:subresource:status
// +kubebuilder:resource:path=clusterversions,scope=Cluster
// +kubebuilder:validation:XValidation:rule="has(self.spec.capabilities) && has(self.spec.capabilities.additionalEnabledCapabilities) && self.spec.capabilities.baselineCapabilitySet == 'None' && 'marketplace' in self.spec.capabilities.additionalEnabledCapabilities ? 'OperatorLifecycleManager' in self.spec.capabilities.additionalEnabledCapabilities || (has(self.status) && has(self.status.capabilities) && has(self.status.capabilities.enabledCapabilities) && 'OperatorLifecycleManager' in self.status.capabilities.enabledCapabilities) : true",message="the `marketplace` capability requires the `OperatorLifecycleManager` capability, which is neither explicitly or implicitly enabled in this cluster, please enable the `OperatorLifecycleManager` capability"
// +openshift:validation:FeatureGateAwareXValidation:requiredFeatureGate=CRDCompatibilityRequirementOperator;ClusterAPIMachineManagement,rule="has(self.spec.capabilities) && has(self.spec.capabilities.additionalEnabledCapabilities) && 'ClusterAPI' in self.spec.capabilities.additionalEnabledCapabilities ? 'CompatibilityRequirements' in self.spec.capabilities.additionalEnabledCapabilities || (has(self.status) && has(self.status.capabilities) && has(self.status.capabilities.enabledCapabilities) && 'CompatibilityRequirements' in self.status.capabilities.enabledCapabilities) : true",message="the `ClusterAPI` capability requires the `CompatibilityRequirements` capability, which is neither explicitly or implicitly enabled in this cluster, please enable the `CompatibilityRequirements` capability"
// +kubebuilder:printcolumn:name=Version,JSONPath=.status.history[?(@.state=="Completed")].version,type=string
// +kubebuilder:printcolumn:name=Available,JSONPath=.status.conditions[?(@.type=="Available")].status,type=string
// +kubebuilder:printcolumn:name=Progressing,JSONPath=.status.conditions[?(@.type=="Progressing")].status,type=string
Expand Down Expand Up @@ -304,7 +305,10 @@ const (
)

// ClusterVersionCapability enumerates optional, core cluster components.
// +kubebuilder:validation:Enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1
// +openshift:validation:FeatureGateAwareEnum:featureGate="",enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1
// +openshift:validation:FeatureGateAwareEnum:featureGate=CRDCompatibilityRequirementOperator,enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1;CompatibilityRequirements
// +openshift:validation:FeatureGateAwareEnum:featureGate=ClusterAPIMachineManagement,enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1;CompatibilityRequirements;ClusterAPI
// +openshift:validation:FeatureGateAwareEnum:requiredFeatureGate=CRDCompatibilityRequirementOperator;ClusterAPIMachineManagement,enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1;CompatibilityRequirements;ClusterAPI
type ClusterVersionCapability string

const (
Expand Down Expand Up @@ -425,6 +429,19 @@ const (
// Managers deployed on top of OpenShift. They help you to work with cloud
// provider API and embeds cloud-specific control logic.
ClusterVersionCapabilityCloudControllerManager ClusterVersionCapability = "CloudControllerManager"

// ClusterVersionCapabilityCompatibilityRequirements manages the Compatibility
// Requirements operator which enforces CRD compatibility constraints via
// validating webhooks.
ClusterVersionCapabilityCompatibilityRequirements ClusterVersionCapability = "CompatibilityRequirements"

// ClusterVersionCapabilityClusterAPI manages the Cluster API operator and
// controllers which provide forward-compatible machine management for
// OpenShift clusters.
//
// Note that Cluster API has a hard requirement on CompatibilityRequirements.
// CompatibilityRequirements cannot be disabled while Cluster API is enabled.
ClusterVersionCapabilityClusterAPI ClusterVersionCapability = "ClusterAPI"
)

// KnownClusterVersionCapabilities includes all known optional, core cluster components.
Expand All @@ -446,6 +463,8 @@ var KnownClusterVersionCapabilities = []ClusterVersionCapability{
ClusterVersionCapabilityCloudCredential,
ClusterVersionCapabilityIngress,
ClusterVersionCapabilityCloudControllerManager,
ClusterVersionCapabilityCompatibilityRequirements,
ClusterVersionCapabilityClusterAPI,
}

// ClusterVersionCapabilitySet defines sets of cluster version capabilities.
Expand Down Expand Up @@ -644,6 +663,8 @@ var ClusterVersionCapabilitySets = map[ClusterVersionCapabilitySet][]ClusterVers
ClusterVersionCapabilityCloudCredential,
ClusterVersionCapabilityIngress,
ClusterVersionCapabilityCloudControllerManager,
ClusterVersionCapabilityCompatibilityRequirements,
ClusterVersionCapabilityClusterAPI,
},
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -442,6 +444,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -469,6 +473,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -442,6 +444,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -469,6 +473,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -425,6 +427,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down Expand Up @@ -452,6 +456,8 @@ spec:
- Ingress
- CloudControllerManager
- OperatorLifecycleManagerV1
- CompatibilityRequirements
- ClusterAPI
type: string
type: array
x-kubernetes-list-type: atomic
Expand Down
3 changes: 3 additions & 0 deletions config/v1/zz_generated.featuregated-crd-manifests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ clusterversions.config.openshift.io:
Capability: ""
Category: ""
FeatureGates:
- CRDCompatibilityRequirementOperator
- CRDCompatibilityRequirementOperator+ClusterAPIMachineManagement
- ClusterAPIMachineManagement
- ClusterUpdateAcceptRisks
- ClusterUpdatePreflight
- ImageStreamImportMode
Expand Down
Loading