diff --git a/config/v1/tests/infrastructures.config.openshift.io/AdaptableTopology.yaml b/config/v1/tests/infrastructures.config.openshift.io/AdaptableTopology.yaml new file mode 100644 index 00000000000..c55a8289df1 --- /dev/null +++ b/config/v1/tests/infrastructures.config.openshift.io/AdaptableTopology.yaml @@ -0,0 +1,81 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "Infrastructure" +crdName: infrastructures.config.openshift.io +featureGates: +- AdaptableTopology +tests: + onCreate: + - name: Should be able to create a minimal Infrastructure + initial: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: {} # No spec is required for a Infrastructure + expected: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: {} + onUpdate: + - name: status should allow controlPlaneTopology value for `Adaptable` on platform None + initial: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + updated: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + status: + controlPlaneTopology: Adaptable + infrastructureTopology: HighlyAvailable + platform: None + platformStatus: + type: None + expected: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + status: + controlPlaneTopology: Adaptable + cpuPartitioning: None + infrastructureTopology: HighlyAvailable + platform: None + platformStatus: + type: None + - name: status should allow infrastructureTopology value for `Adaptable` on platform None + initial: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + updated: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + status: + controlPlaneTopology: HighlyAvailable + infrastructureTopology: Adaptable + platform: None + platformStatus: + type: None + expected: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: None + status: + controlPlaneTopology: HighlyAvailable + cpuPartitioning: None + infrastructureTopology: Adaptable + platform: None + platformStatus: + type: None diff --git a/config/v1/types_infrastructure.go b/config/v1/types_infrastructure.go index c579be3a110..68ffb18dee8 100644 --- a/config/v1/types_infrastructure.go +++ b/config/v1/types_infrastructure.go @@ -107,6 +107,7 @@ type InfrastructureStatus struct { // +kubebuilder:default=HighlyAvailable // +openshift:validation:FeatureGateAwareEnum:featureGate="",enum=HighlyAvailable;HighlyAvailableArbiter;SingleReplica;External // +openshift:validation:FeatureGateAwareEnum:featureGate=DualReplica,enum=HighlyAvailable;HighlyAvailableArbiter;SingleReplica;DualReplica;External + // +openshift:validation:FeatureGateAwareEnum:featureGate=AdaptableTopology,enum=HighlyAvailable;HighlyAvailableArbiter;SingleReplica;DualReplica;Adaptable;External // +optional ControlPlaneTopology TopologyMode `json:"controlPlaneTopology"` @@ -119,6 +120,7 @@ type InfrastructureStatus struct { // NOTE: External topology mode is not applicable for this field. // +kubebuilder:default=HighlyAvailable // +kubebuilder:validation:Enum=HighlyAvailable;SingleReplica + // +openshift:validation:FeatureGateAwareEnum:featureGate=AdaptableTopology,enum=HighlyAvailable;SingleReplica;Adaptable // +optional InfrastructureTopology TopologyMode `json:"infrastructureTopology,omitempty"` @@ -159,6 +161,10 @@ const ( // that any of the control plane components such as kubernetes API server or etcd are visible within // the cluster. ExternalTopologyMode TopologyMode = "External" + + // "Adaptable" is for clusters that dynamically adjust control-plane and + // infrastructure behavior based on current node count. + AdaptableTopologyMode TopologyMode = "Adaptable" ) // CPUPartitioningMode defines the mode for CPU partitioning diff --git a/config/v1/zz_generated.featuregated-crd-manifests.yaml b/config/v1/zz_generated.featuregated-crd-manifests.yaml index 84c1443d448..9af29fc4c83 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests.yaml @@ -369,6 +369,7 @@ infrastructures.config.openshift.io: FeatureGates: - AWSClusterHostedDNSInstall - AWSDualStackInstall + - AdaptableTopology - AzureClusterHostedDNSInstall - AzureDualStackInstall - DualReplica diff --git a/features.md b/features.md index 8112c57f728..1638ef1eb8c 100644 --- a/features.md +++ b/features.md @@ -6,6 +6,7 @@ | MachineAPIOperatorDisableMachineHealthCheckController| | | | | | | | | | MultiArchInstallAzure| | | | | | | | | | ShortCertRotation| | | | | | | | | +| AdaptableTopology| | | | Enabled | | | | | | ClusterAPIComputeInstall| | | Enabled | Enabled | | | | | | ClusterAPIControlPlaneInstall| | | Enabled | Enabled | | | | | | ClusterUpdatePreflight| | | Enabled | Enabled | | | | | diff --git a/features/features.go b/features/features.go index 5d148165cc5..440616df394 100644 --- a/features/features.go +++ b/features/features.go @@ -115,6 +115,14 @@ var ( enable(inDefault(), inOKD(), inTechPreviewNoUpgrade(), inDevPreviewNoUpgrade()). mustRegister() + FeatureGateAdaptableTopology = newFeatureGate("AdaptableTopology"). + reportProblemsToJiraComponent("Adaptable Topology"). + contactPerson("jaypoulz"). + productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1905"). + enable(inClusterProfile(SelfManaged), inDevPreviewNoUpgrade()). + mustRegister() + FeatureGateAzureWorkloadIdentity = newFeatureGate("AzureWorkloadIdentity"). reportProblemsToJiraComponent("cloud-credential-operator"). contactPerson("abutcher"). diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml index 4e3d9558567..937f19ed430 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml @@ -32,6 +32,7 @@ controllerconfigs.machineconfiguration.openshift.io: - AWSClusterHostedDNSInstall - AWSDualStackInstall - AWSEuropeanSovereignCloudInstall + - AdaptableTopology - AzureClusterHostedDNSInstall - AzureDualStackInstall - DualReplica diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml index c1d43a43bc4..7c9c97c695a 100644 --- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-Default.yaml @@ -32,6 +32,9 @@ { "name": "AWSServiceLBNetworkSecurityGroup" }, + { + "name": "AdaptableTopology" + }, { "name": "AdditionalStorageConfig" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml index d407d6bea75..34914b43737 100644 --- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-DevPreviewNoUpgrade.yaml @@ -16,6 +16,9 @@ "featureGates": [ { "disabled": [ + { + "name": "AdaptableTopology" + }, { "name": "ClientsAllowCBOR" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml index 8c603acea37..a93c1c11f57 100644 --- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-OKD.yaml @@ -34,6 +34,9 @@ { "name": "AWSServiceLBNetworkSecurityGroup" }, + { + "name": "AdaptableTopology" + }, { "name": "AdditionalStorageConfig" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml index 2e4864797f3..4ca32d397cf 100644 --- a/payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-Hypershift-TechPreviewNoUpgrade.yaml @@ -16,6 +16,9 @@ "featureGates": [ { "disabled": [ + { + "name": "AdaptableTopology" + }, { "name": "ClientsAllowCBOR" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml index 4f43aef34ef..14d45f3924f 100644 --- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-Default.yaml @@ -29,6 +29,9 @@ { "name": "AWSEuropeanSovereignCloudInstall" }, + { + "name": "AdaptableTopology" + }, { "name": "AdditionalStorageConfig" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml index c69db071a71..f0592fae366 100644 --- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-DevPreviewNoUpgrade.yaml @@ -57,6 +57,9 @@ { "name": "AWSServiceLBNetworkSecurityGroup" }, + { + "name": "AdaptableTopology" + }, { "name": "AdditionalStorageConfig" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml index 596cc8ad492..d4e1ec1dd5c 100644 --- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-OKD.yaml @@ -31,6 +31,9 @@ { "name": "AWSEuropeanSovereignCloudInstall" }, + { + "name": "AdaptableTopology" + }, { "name": "AdditionalStorageConfig" }, diff --git a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml index 11c4f83aaf1..6f5808d6514 100644 --- a/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-4-10-SelfManagedHA-TechPreviewNoUpgrade.yaml @@ -16,6 +16,9 @@ "featureGates": [ { "disabled": [ + { + "name": "AdaptableTopology" + }, { "name": "ClientsAllowCBOR" },