diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml
index 948b87fdad3..bf848524b26 100644
--- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml
+++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_infrastructures-Default.crd.yaml
@@ -1010,19 +1010,30 @@ spec:
type: array
x-kubernetes-list-type: atomic
x-kubernetes-validations:
+ - message: Cannot add and remove vCenters at the same time
+ rule: 'size(self) >= size(oldSelf) ? oldSelf.all(x, self.exists(y,
+ y.server == x.server)) : true'
+ - message: Cannot add and remove vCenters at the same time
+ rule: 'size(self) < size(oldSelf) ? self.all(x, oldSelf.exists(y,
+ y.server == x.server)) : true'
- message: vcenters must have unique server values
rule: self.all(x, self.exists_one(y, y.server == x.server))
type: object
x-kubernetes-validations:
+ - message: all failure domains must have a corresponding vCenter
+ entry
+ rule: '!has(self.failureDomains) || size(self.failureDomains)
+ == 0 || (has(self.vcenters) && self.failureDomains.all(fd,
+ self.vcenters.exists(vc, vc.server == fd.server)))'
- message: apiServerInternalIPs list is required once set
rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)'
- message: ingressIPs list is required once set
rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)'
type: object
x-kubernetes-validations:
- - message: vcenters can have at most 1 item when configured post-install
- rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? (has(self.vsphere.vcenters)
- && size(self.vsphere.vcenters) < 2) : true'
+ - message: vcenters is required once set and cannot be removed
+ rule: 'oldSelf.?vsphere.vcenters.hasValue() ? self.?vsphere.vcenters.hasValue()
+ : true'
type: object
status:
description: status holds observed values from the cluster. They may not
diff --git a/features.md b/features.md
index 9d1d91adf62..01a452ae260 100644
--- a/features.md
+++ b/features.md
@@ -63,7 +63,6 @@
| TranslateStreamCloseWebsocketRequests| | | Enabled | Enabled | Enabled | Enabled |
| VSphereConfigurableMaxAllowedBlockVolumesPerNode| | | Enabled | Enabled | Enabled | Enabled |
| VSphereHostVMGroupZonal| | | Enabled | Enabled | Enabled | Enabled |
-| VSphereMultiVCenterDay2| | | Enabled | Enabled | Enabled | Enabled |
| VolumeAttributesClass| | | Enabled | Enabled | Enabled | Enabled |
| VolumeGroupSnapshot| | | Enabled | Enabled | Enabled | Enabled |
| AdditionalRoutingCapabilities| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
@@ -103,3 +102,4 @@
| UserNamespacesSupport| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| VSphereMultiDisk| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| VSphereMultiNetworks| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
+| VSphereMultiVCenterDay2| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
diff --git a/features/features.go b/features/features.go
index 6bf09817957..bd705e08638 100644
--- a/features/features.go
+++ b/features/features.go
@@ -788,7 +788,7 @@ var (
contactPerson("vr4manta").
productScope(ocpSpecific).
enhancementPR("https://github.com/openshift/enhancements/pull/1961").
- enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
+ enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
mustRegister()
FeatureGatePreconfiguredUDNAddresses = newFeatureGate("PreconfiguredUDNAddresses").
diff --git a/machineconfiguration/v1/zz_generated.crd-manifests/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml b/machineconfiguration/v1/zz_generated.crd-manifests/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
index 18143df940a..022d57433e7 100644
--- a/machineconfiguration/v1/zz_generated.crd-manifests/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
+++ b/machineconfiguration/v1/zz_generated.crd-manifests/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
@@ -1287,11 +1287,24 @@ spec:
type: array
x-kubernetes-list-type: atomic
x-kubernetes-validations:
+ - message: Cannot add and remove vCenters at the same
+ time
+ rule: 'size(self) >= size(oldSelf) ? oldSelf.all(x,
+ self.exists(y, y.server == x.server)) : true'
+ - message: Cannot add and remove vCenters at the same
+ time
+ rule: 'size(self) < size(oldSelf) ? self.all(x,
+ oldSelf.exists(y, y.server == x.server)) : true'
- message: vcenters must have unique server values
rule: self.all(x, self.exists_one(y, y.server ==
x.server))
type: object
x-kubernetes-validations:
+ - message: all failure domains must have a corresponding
+ vCenter entry
+ rule: '!has(self.failureDomains) || size(self.failureDomains)
+ == 0 || (has(self.vcenters) && self.failureDomains.all(fd,
+ self.vcenters.exists(vc, vc.server == fd.server)))'
- message: apiServerInternalIPs list is required once
set
rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)'
@@ -1299,10 +1312,9 @@ spec:
rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)'
type: object
x-kubernetes-validations:
- - message: vcenters can have at most 1 item when configured
- post-install
- rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? (has(self.vsphere.vcenters)
- && size(self.vsphere.vcenters) < 2) : true'
+ - message: vcenters is required once set and cannot be removed
+ rule: 'oldSelf.?vsphere.vcenters.hasValue() ? self.?vsphere.vcenters.hasValue()
+ : true'
type: object
status:
description: status holds observed values from the cluster. They
diff --git a/payload-manifests/crds/0000_10_config-operator_01_infrastructures-Default.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_infrastructures-Default.crd.yaml
index 948b87fdad3..bf848524b26 100644
--- a/payload-manifests/crds/0000_10_config-operator_01_infrastructures-Default.crd.yaml
+++ b/payload-manifests/crds/0000_10_config-operator_01_infrastructures-Default.crd.yaml
@@ -1010,19 +1010,30 @@ spec:
type: array
x-kubernetes-list-type: atomic
x-kubernetes-validations:
+ - message: Cannot add and remove vCenters at the same time
+ rule: 'size(self) >= size(oldSelf) ? oldSelf.all(x, self.exists(y,
+ y.server == x.server)) : true'
+ - message: Cannot add and remove vCenters at the same time
+ rule: 'size(self) < size(oldSelf) ? self.all(x, oldSelf.exists(y,
+ y.server == x.server)) : true'
- message: vcenters must have unique server values
rule: self.all(x, self.exists_one(y, y.server == x.server))
type: object
x-kubernetes-validations:
+ - message: all failure domains must have a corresponding vCenter
+ entry
+ rule: '!has(self.failureDomains) || size(self.failureDomains)
+ == 0 || (has(self.vcenters) && self.failureDomains.all(fd,
+ self.vcenters.exists(vc, vc.server == fd.server)))'
- message: apiServerInternalIPs list is required once set
rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)'
- message: ingressIPs list is required once set
rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)'
type: object
x-kubernetes-validations:
- - message: vcenters can have at most 1 item when configured post-install
- rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? (has(self.vsphere.vcenters)
- && size(self.vsphere.vcenters) < 2) : true'
+ - message: vcenters is required once set and cannot be removed
+ rule: 'oldSelf.?vsphere.vcenters.hasValue() ? self.?vsphere.vcenters.hasValue()
+ : true'
type: object
status:
description: status holds observed values from the cluster. They may not
diff --git a/payload-manifests/crds/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml b/payload-manifests/crds/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
index 18143df940a..022d57433e7 100644
--- a/payload-manifests/crds/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
+++ b/payload-manifests/crds/0000_80_machine-config_01_controllerconfigs-Default.crd.yaml
@@ -1287,11 +1287,24 @@ spec:
type: array
x-kubernetes-list-type: atomic
x-kubernetes-validations:
+ - message: Cannot add and remove vCenters at the same
+ time
+ rule: 'size(self) >= size(oldSelf) ? oldSelf.all(x,
+ self.exists(y, y.server == x.server)) : true'
+ - message: Cannot add and remove vCenters at the same
+ time
+ rule: 'size(self) < size(oldSelf) ? self.all(x,
+ oldSelf.exists(y, y.server == x.server)) : true'
- message: vcenters must have unique server values
rule: self.all(x, self.exists_one(y, y.server ==
x.server))
type: object
x-kubernetes-validations:
+ - message: all failure domains must have a corresponding
+ vCenter entry
+ rule: '!has(self.failureDomains) || size(self.failureDomains)
+ == 0 || (has(self.vcenters) && self.failureDomains.all(fd,
+ self.vcenters.exists(vc, vc.server == fd.server)))'
- message: apiServerInternalIPs list is required once
set
rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)'
@@ -1299,10 +1312,9 @@ spec:
rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)'
type: object
x-kubernetes-validations:
- - message: vcenters can have at most 1 item when configured
- post-install
- rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? (has(self.vsphere.vcenters)
- && size(self.vsphere.vcenters) < 2) : true'
+ - message: vcenters is required once set and cannot be removed
+ rule: 'oldSelf.?vsphere.vcenters.hasValue() ? self.?vsphere.vcenters.hasValue()
+ : true'
type: object
status:
description: status holds observed values from the cluster. They
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
index c760216ef27..056e4ab78ba 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
@@ -202,9 +202,6 @@
{
"name": "VSphereMixedNodeEnv"
},
- {
- "name": "VSphereMultiVCenterDay2"
- },
{
"name": "VolumeAttributesClass"
},
@@ -323,6 +320,9 @@
},
{
"name": "VSphereMultiNetworks"
+ },
+ {
+ "name": "VSphereMultiVCenterDay2"
}
],
"version": ""
diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
index 0f55cb9dff6..b7d9596f777 100644
--- a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
@@ -199,9 +199,6 @@
{
"name": "VSphereMixedNodeEnv"
},
- {
- "name": "VSphereMultiVCenterDay2"
- },
{
"name": "VolumeAttributesClass"
},
@@ -323,6 +320,9 @@
},
{
"name": "VSphereMultiNetworks"
+ },
+ {
+ "name": "VSphereMultiVCenterDay2"
}
],
"version": ""