From ed6abb0103ac4386330d53ffae4e6f2ad13345d2 Mon Sep 17 00:00:00 2001 From: ehila Date: Mon, 14 Jul 2025 05:28:48 -0400 Subject: [PATCH 1/3] feat: promote HighlyAvailableArbiter feature to default Signed-off-by: ehila --- ..._10_config-operator_01_infrastructures-Default.crd.yaml | 1 + features.md | 2 +- features/features.go | 7 ++----- ...80_machine-config_01_controllerconfigs-Default.crd.yaml | 1 + ..._10_config-operator_01_infrastructures-Default.crd.yaml | 1 + ...80_machine-config_01_controllerconfigs-Default.crd.yaml | 1 + .../featuregates/featureGate-Hypershift-Default.yaml | 6 +++--- .../featuregates/featureGate-SelfManagedHA-Default.yaml | 6 +++--- 8 files changed, 13 insertions(+), 12 deletions(-) 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 6dcc0cfb6aa..1ae221ca458 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 @@ -1051,6 +1051,7 @@ spec: its components are not visible within the cluster. enum: - HighlyAvailable + - HighlyAvailableArbiter - SingleReplica - External type: string diff --git a/features.md b/features.md index c20741dfa28..d1f559c0c75 100644 --- a/features.md +++ b/features.md @@ -33,7 +33,6 @@ | ExternalOIDCWithUIDAndExtraClaimMappings| | | Enabled | Enabled | Enabled | Enabled | | GCPClusterHostedDNS| | | Enabled | Enabled | Enabled | Enabled | | GCPCustomAPIEndpoints| | | Enabled | Enabled | Enabled | Enabled | -| HighlyAvailableArbiter| | | Enabled | Enabled | Enabled | Enabled | | ImageModeStatusReporting| | | Enabled | Enabled | Enabled | Enabled | | ImageStreamImportMode| | | Enabled | Enabled | Enabled | Enabled | | IngressControllerDynamicConfigurationManager| | | Enabled | Enabled | Enabled | Enabled | @@ -77,6 +76,7 @@ | GatewayAPI| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | GatewayAPIController| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | HardwareSpeed| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | +| HighlyAvailableArbiter| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | IngressControllerLBSubnetsAWS| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | KMSv1| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | MachineConfigNodes| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | diff --git a/features/features.go b/features/features.go index ac87294baca..98780867fe2 100644 --- a/features/features.go +++ b/features/features.go @@ -698,11 +698,8 @@ var ( contactPerson("eggfoobar"). productScope(ocpSpecific). enhancementPR("https://github.com/openshift/enhancements/pull/1674"). - // TODO: Do not go GA until jira issue is resolved: https://issues.redhat.com/browse/OCPEDGE-1637 - // Annotations must correctly handle either DualReplica or HighlyAvailableArbiter going GA with - // the other still in TechPreview. - enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). - mustRegister() + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade, configv1.Default). + mustRegister() FeatureGateCVOConfiguration = newFeatureGate("ClusterVersionOperatorConfiguration"). reportProblemsToJiraComponent("Cluster Version Operator"). 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 c6b83d32542..96b84fb71be 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 @@ -1332,6 +1332,7 @@ spec: its components are not visible within the cluster. enum: - HighlyAvailable + - HighlyAvailableArbiter - SingleReplica - External type: string 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 6dcc0cfb6aa..1ae221ca458 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 @@ -1051,6 +1051,7 @@ spec: its components are not visible within the cluster. enum: - HighlyAvailable + - HighlyAvailableArbiter - SingleReplica - External type: string 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 c6b83d32542..96b84fb71be 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 @@ -1332,6 +1332,7 @@ spec: its components are not visible within the cluster. enum: - HighlyAvailable + - HighlyAvailableArbiter - SingleReplica - External type: string diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml index f1d65162fb3..4523a9c714d 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml @@ -82,9 +82,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "HighlyAvailableArbiter" - }, { "name": "ImageModeStatusReporting" }, @@ -246,6 +243,9 @@ { "name": "HardwareSpeed" }, + { + "name": "HighlyAvailableArbiter" + }, { "name": "IngressControllerLBSubnetsAWS" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml index 72d0e9bd686..070928192e0 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml @@ -85,9 +85,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "HighlyAvailableArbiter" - }, { "name": "ImageModeStatusReporting" }, @@ -243,6 +240,9 @@ { "name": "HardwareSpeed" }, + { + "name": "HighlyAvailableArbiter" + }, { "name": "IngressControllerLBSubnetsAWS" }, From 23f1882a3d81a6784a106d62a1a3128a244be903 Mon Sep 17 00:00:00 2001 From: ehila Date: Mon, 14 Jul 2025 13:14:27 -0400 Subject: [PATCH 2/3] upkeep: updated integration tests for DualReplica and Arbiter updated integration tests to reference baremetal to keep inline with Arbiter and DualReplica main platform use Signed-off-by: ehila --- .../DualReplica.yaml | 46 +++++----- .../HighlyAvailableArbiter+DualReplica.yaml | 90 ++++++++++--------- .../HighlyAvailableArbiter.yaml | 44 ++++----- 3 files changed, 96 insertions(+), 84 deletions(-) diff --git a/config/v1/tests/infrastructures.config.openshift.io/DualReplica.yaml b/config/v1/tests/infrastructures.config.openshift.io/DualReplica.yaml index aa83cf190e6..bc1592c5ac9 100644 --- a/config/v1/tests/infrastructures.config.openshift.io/DualReplica.yaml +++ b/config/v1/tests/infrastructures.config.openshift.io/DualReplica.yaml @@ -21,59 +21,63 @@ tests: kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: DualReplica infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expected: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: DualReplica cpuPartitioning: None infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: - cloudLoadBalancerConfig: - dnsType: PlatformDefault - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal - name: should not allow changing infrastructureTopology value to `DualReplica` initial: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailable infrastructureTopology: DualReplica - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expectedStatusError: 'status.infrastructureTopology: Unsupported value: "DualReplica": supported values: "HighlyAvailable", "SingleReplica"' diff --git a/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml b/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml index 20bd8ddc9ca..76db93fc07d 100644 --- a/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml +++ b/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml @@ -22,61 +22,63 @@ tests: kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailableArbiter infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: {} + type: BareMetal expected: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailableArbiter cpuPartitioning: None infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: - cloudLoadBalancerConfig: - dnsType: PlatformDefault - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal - name: should not allow changing infrastructureTopology value to `HighlyAvailableArbiter` initial: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailable infrastructureTopology: HighlyAvailableArbiter - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expectedStatusError: 'status.infrastructureTopology: Unsupported value: "HighlyAvailableArbiter": supported values: "HighlyAvailable", "SingleReplica"' - name: status should allow controlPlaneTopology value for `DualReplica` initial: | @@ -84,59 +86,63 @@ tests: kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: DualReplica infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expected: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: DualReplica cpuPartitioning: None infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: - cloudLoadBalancerConfig: - dnsType: PlatformDefault - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal - name: should not allow changing infrastructureTopology value to `DualReplica` initial: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailable infrastructureTopology: DualReplica - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expectedStatusError: 'status.infrastructureTopology: Unsupported value: "DualReplica": supported values: "HighlyAvailable", "SingleReplica"' diff --git a/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml b/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml index 6e67544834f..724888cfd5c 100644 --- a/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml +++ b/config/v1/tests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml @@ -21,59 +21,61 @@ tests: kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailableArbiter infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: {} + type: BareMetal expected: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailableArbiter cpuPartitioning: None infrastructureTopology: HighlyAvailable - platform: AWS + platform: BareMetal platformStatus: - aws: - cloudLoadBalancerConfig: - dnsType: PlatformDefault - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal - name: should not allow changing infrastructureTopology value to `HighlyAvailableArbiter` initial: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - aws: {} - type: AWS + baremetal: {} + type: BareMetal updated: | apiVersion: config.openshift.io/v1 kind: Infrastructure spec: platformSpec: - type: AWS - aws: {} + type: BareMetal + baremetal: {} status: controlPlaneTopology: HighlyAvailable infrastructureTopology: HighlyAvailableArbiter - platform: AWS + platform: BareMetal platformStatus: - aws: {} - type: AWS + baremetal: + loadBalancer: + type: OpenShiftManagedDefault + type: BareMetal expectedStatusError: 'status.infrastructureTopology: Unsupported value: "HighlyAvailableArbiter": supported values: "HighlyAvailable", "SingleReplica"' From 4acf014a9d44900b42a2560013cb3f46c1ef3316 Mon Sep 17 00:00:00 2001 From: ehila Date: Mon, 14 Jul 2025 13:15:15 -0400 Subject: [PATCH 3/3] feat: add two node support to featuregate analyzer added two node topology support for featuregate test analyzer to match and query sippy for two node test history Signed-off-by: ehila --- .../codegen/cmd/featuregate-test-analyzer.go | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/tools/codegen/cmd/featuregate-test-analyzer.go b/tools/codegen/cmd/featuregate-test-analyzer.go index 5ad3bc6830c..60f1fc7c5d5 100644 --- a/tools/codegen/cmd/featuregate-test-analyzer.go +++ b/tools/codegen/cmd/featuregate-test-analyzer.go @@ -368,14 +368,14 @@ var ( Topology: "ha", NetworkStack: "dual", }, + { + Cloud: "aws", + Architecture: "amd64", + Topology: "single-node", + }, // TODO restore these once we run TechPreview jobs that contain them //{ - // Cloud: "aws", - // Architecture: "amd64", - // Topology: "single-node", - //}, - //{ // Cloud: "metal-ipi", // Architecture: "amd64", // Topology: "single-node", @@ -394,6 +394,42 @@ var ( Architecture: "amd64", Topology: "ha", }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-arbiter", + NetworkStack: "ipv4", + }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-arbiter", + NetworkStack: "ipv6", + }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-arbiter", + NetworkStack: "dual", + }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-fencing", + NetworkStack: "ipv4", + }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-fencing", + NetworkStack: "ipv6", + }, + { + Cloud: "metal", + Architecture: "amd64", + Topology: "two-node-fencing", + NetworkStack: "dual", + }, } nonHypershiftPlatforms = regexp.MustCompile("(?i)nutanix|metal|vsphere|openstack|azure|gcp") @@ -503,8 +539,9 @@ func filterVariants(featureGate string, variantsList ...[]JobVariant) []JobVaria for _, variant := range variants { normalizedCloud := strings.ReplaceAll(strings.ToLower(variant.Cloud), "-ipi", "") // The feature gate probably won't include the install type, but some cloud variants do normalizedArchitecture := strings.ToLower(variant.Architecture) + normalizedTopology := strings.ToLower(variant.Topology) - if strings.Contains(normalizedFeatureGate, normalizedCloud) || strings.Contains(normalizedFeatureGate, normalizedArchitecture) { + if strings.Contains(normalizedFeatureGate, normalizedCloud) || strings.Contains(normalizedFeatureGate, normalizedArchitecture) || matchTwoNodeFeatureGates(normalizedFeatureGate, normalizedTopology) { filteredVariants = append(filteredVariants, variant) } } @@ -680,3 +717,14 @@ func listTestResultForVariant(featureGate string, jobVariant JobVariant) (*Testi return jobVariantResults, nil } + +// Check for Arbiter and DualReplica or Fencing featureGates as these have special topologies +func matchTwoNodeFeatureGates(featureGate string, topology string) bool { + if strings.Contains(featureGate, "arbiter") && strings.Contains(topology, "arbiter") { + return true + } + if (strings.Contains(featureGate, "dualreplica") || strings.Contains(featureGate, "fencing")) && strings.Contains(topology, "fencing") { + return true + } + return false +}