CNTRLPLANE-3790

External OIDC Test Investigation

Why does e2e-azure-aks-external-oidc not exist for 4.22 and 5.0, and should it be added to the release gating pipeline?

Analysis 2 of 2 for CNTRLPLANE-3790

CNTRLPLANE-3790 CNTRLPLANE-3434 (parent epic) Analysis 1: Conformance test

Last updated: 2026-08-05 · Investigator: Alessandro Rossi

Context

Background

CNTRLPLANE-3790 tracks the expansion of the ARO HCP release gating pipeline's blocking test suite. The current pipeline (ITS source) has 9 blocking tests and 1 informing test.

The issue requires two separate investigations, each covered by its own report:

  1. Analysis 1 of 2: Should e2e-azure-aks-ovn-conformance be promoted from informing to blocking?
  2. This report (2 of 2): Why does e2e-azure-aks-external-oidc not exist for 4.22/5.0, and should it be added?
Current blocking tests (9):
  • e2e-aks (5.0)
  • hcm-azure-e2e-aks-upgrade-minor (5.0)
  • e2e-aks-multi-x-ax (5.0, 4.22, 4.21, 4.20)
  • hcm-azure-e2e-aks-upgrade-from-zero (4.22, 4.21, 4.20)
Current informing test (1):

The investigation must determine:

  1. Is the External OIDC feature GA in 4.22+? If so, the non-techpreview test should be re-added.
  2. Is the techpreview variant still needed, or has the feature graduated?
  3. Should either variant be a candidate for blocking in the promotion pipeline?
Test variants:
JobReleasesScheduleDescription
e2e-azure-aks-external-oidc 4.20, 4.21 Daily (cron) Tests TestExternalOIDC with cert-based auth on AKS, Keycloak as OIDC provider
e2e-azure-aks-external-oidc-techpreview 4.21 only 3x/month Same test with TECH_PREVIEW_NO_UPGRADE: true
Note: A presubmit variant e2e-azure-aks-external-oidc-techpreview exists in 5.0 (always_run: false, optional), but no periodic job exists for 4.22 or 5.0.

Test Origin and Feature History

Feature: External OIDC

The External OIDC feature allows customers to bring their own OIDC provider for direct API server access, replacing OpenShift's built-in OAuth. The feature has a clear Jira lineage:

OCPSTRAT-1804 - "Bring Your Own External OIDC based Auth provider [...] GA" Closed

Top-level feature request. Confirmed GA.

CNTRLPLANE-883 - "Enhancements to Bring Your Own External OIDC [...] [Standalone OCP]" Closed

Epic. Owner: Ilias Rinis. Contains all implementation and testing stories.

CNTRLPLANE-946 - "Add payload tests for HyperShift" Closed - Done

Assigned: XiuJuan Wang (xiuwang@redhat.com). Created the AKS external OIDC periodic jobs for 4.20 and 4.21 via openshift/release#68741, merged 2025-12-18.

Feature gate status

Verified in the HyperShift codebase (control-plane-operator/featuregates/featuregates.go):

Feature GateEnabled ForStatus
ExternalOIDCWithUIDAndExtraClaimMappings configv1.Default, TechPreviewNoUpgrade GA
ExternalOIDCWithUpstreamParity TechPreviewNoUpgrade only TechPreview

Bryce Palmer confirmed in a CNTRLPLANE-946 comment (2025-11-17) that the ExternalOIDC and ExternalOIDCWithUIDAndExtraClaimMappings feature gates were promoted (graduated to GA) in both 4.21 and 4.20.z.

Conclusion: The base External OIDC feature is GA since 4.20. The non-techpreview test variant (e2e-azure-aks-external-oidc) exercises GA functionality and should exist in all active releases.

Version Propagation Gap

Why the test is missing from 4.22 and 5.0

The config-brancher tool, used to propagate CI configurations from one release branch to the next, runs with the --skip-periodics flag. This means periodic jobs are never automatically propagated to new release branches - they must be manually re-added after each branching.

The test was created for 4.20/4.21 by PR #68741 (XiuJuan Wang, Dec 2025). When the 4.22 and 5.0 branches were created, the periodic jobs were not carried forward, and no follow-up issue was created to re-add them.

QE team issue audit

We audited all related Jira issues under the CNTRLPLANE-883 epic to determine whether any issue had the propagation in scope:

AUTH-530 - "e2e testing automation: Direct External OIDC Provider for Standalone OCP" Obsolete

Assigned: Xingxing Xia. Closed in favor of AUTH-553. No propagation scope.

AUTH-552 - "pre-merge testing: Enhancements to BYO External OIDC [...]" Obsolete

Assigned: Xingxing Xia. Closed as obsolete: "Pre-merge test was done in some Stories."

AUTH-553 - "e2e testing automation: Enhancements to BYO External OIDC [...]" Obsolete

Assigned: Xingxing Xia. Closed as obsolete: "tracked in other Stories like CNTRLPLANE-946, or covered by AUTH-554."

AUTH-554 - "CI implementation: Enhancements to BYO External OIDC [...]" Done

Assigned: Xingxing Xia. Closed with three "time debt" items moved out (AUTH-560, AUTH-569, AUTH-575) - none related to version propagation.

Remaining "time debt" issues (still In Progress)
IssueSummaryScope
AUTH-560 Integrate Cypress for Keycloak browser login automation in Prow CI Browser automation, not propagation
AUTH-569 CI for switching from BYO External OIDC back to OpenShift OAuth Regression testing, not propagation
AUTH-575 Add https_proxy variant external OIDC CI Proxy variant, not propagation
Finding: No Jira issue - closed, obsolete, or in-progress - had the propagation of the External OIDC periodic test to 4.22/5.0 in scope. The test was created, the feature graduated to GA, but the periodic jobs were never re-added after release branching. This appears to be a gap in the handover process.

CI Configuration Audit

Two distinct External OIDC test families

The External OIDC periodic suite is split across two cloud providers, each using a different OIDC provider setup and a different workflow. Both run the same Go test (TestExternalOIDC) but under different authentication configurations.

PropertyAzure AKS variantAWS variant
Workflow hypershift-azure-aks-external-oidc hypershift-aws-e2e-external-oidc
Cluster profile hypershift-aks hypershift-aws
OIDC provider Keycloak on AKS (idp-external-oidc-keycloak-aks-server step) Keycloak (OAUTH_EXTERNAL_OIDC_PROVIDER: keycloak)
Auth method Certificate-based (AUTH_THROUGH_CERTS: "true") Standard
Additional env ENABLE_HYPERSHIFT_CERT_ROTATION_SCALE: "true" -
Schedule (where present) cron: 0 9 * * * (daily) or 0 10 * * * minimum_interval: 12h
First introduced 4.20 (PR #68741, Dec 2025) 4.21+
Key distinction: The Azure AKS variant is the one relevant to ARO HCP release gating, as the promotion pipeline specifically targets AKS-based HyperShift deployments. The AWS variant exercises the same feature but on a different platform.
Periodic job coverage matrix

Full audit of External OIDC periodic job presence across all active releases. Source: ci-operator/config/openshift/hypershift/openshift-hypershift-release-{version}__periodics.yaml in openshift/release.

Periodic job 4.20 4.21 4.22 5.0
e2e-azure-aks-external-oidc Daily Daily MISSING MISSING
e2e-azure-aks-external-oidc-techpreview - 3x/month MISSING MISSING
e2e-aws-external-oidc - 12h interval 12h interval 12h interval
e2e-aws-external-oidc-techpreview - 12h interval 12h interval 12h interval
Finding: Only the Azure AKS variants are missing from 4.22 and 5.0. The AWS variants were correctly propagated (or re-added) for all releases from 4.21 onward. This asymmetry confirms the gap is specific to the AKS test family and was not a blanket omission of all External OIDC periodics.
Presubmit coverage (for reference)

Presubmit configuration for the Azure AKS External OIDC test (from openshift-hypershift-release-{version}.yaml):

Presubmit job 4.21 4.22 5.0
e2e-azure-aks-external-oidc Present (always_run) MISSING MISSING
e2e-azure-aks-external-oidc-techpreview - MISSING Present (optional)
Note: The presubmit gap is broader than the periodic gap. 4.22 has no Azure AKS External OIDC presubmit at all, while 5.0 only has the techpreview variant (optional, not always_run). This is noted for completeness but is outside the scope of CNTRLPLANE-3790, which focuses on periodic jobs for the release gating pipeline.

Sippy Results (4.20 and 4.21)

Job Health: 4.20
Sippy Job Health 4.20 - external-oidc 100%

Figure 1: Sippy Job Health for 4.20, filtered by e2e-azure-aks-external-oidc. Source: Sippy Job Health

Sippy Job Analysis 4.20 - 13 runs, 13 successful

Figure 2: Sippy Job Analysis for 4.20. 13 runs, 13 successful. Source: Sippy Job Analysis

Job Health: 4.21
Sippy Job Health 4.21 - external-oidc 100%, techpreview 0%

Figure 3: Sippy Job Health for 4.21, filtered by e2e-azure-aks-external-oidc. Non-techpreview: 100% (6 runs current, 7 previous). Techpreview: 0% (0 runs current, 1 previous). Source: Sippy Job Health

Sippy Job Analysis 4.21 - 13 runs, 13 successful

Figure 4: Sippy Job Analysis for 4.21 non-techpreview. 13 runs, 13 successful. Source: Sippy Job Analysis

Sippy Job Analysis 4.21 techpreview - 1 run, 0 successful

Figure 5: Sippy Job Analysis for 4.21 techpreview. 1 run, 0 successful. Source: Sippy Job Analysis

Sippy summary
JobReleaseCurrentRunsPreviousRuns
e2e-azure-aks-external-oidc 4.20 100% 6 100% 7
e2e-azure-aks-external-oidc 4.21 100% 6 100% 7
e2e-azure-aks-external-oidc-techpreview 4.21 0% 0 0% 1
Caveat: Sippy's reporting window covers only the most recent ~2 weeks. The non-techpreview test shows a perfect 100% pass rate, but on only 13 total runs (6 current + 7 previous). This sample is too small to draw conclusions about long-term reliability. A deeper analysis using Prow job history is needed.

Prow Job History (Full Data)

Methodology

Since Sippy only covers ~2 weeks, we fetched the full job history from Prow by paginating through all available runs. This covers the entire period from the first run (late February 2026) to present (August 5, 2026) - approximately 5.5 months of data.

Release 4.21: e2e-azure-aks-external-oidc
Total runs199
Successes174
Failures25
Pass rate87.4%
Period2026-02-25 to 2026-08-05
Failure timeline:
DateDurationPattern
2026-02-2661 minEarly runs
2026-03-0253 min
2026-03-18 - 03-190-50 min
2026-03-2623 minIsolated
2026-04-03 - 04-1420-48 minSporadic
2026-05-2225 minIsolated
2026-06-0224 minCluster: 8 failures in 8 days
2026-06-0926 min
2026-06-1025 min
2026-06-1118 min
2026-06-120 min
2026-06-1311 min
2026-06-14 - 06-163-9 min
2026-07-01 - 07-1118-71 minSporadic (3 failures)
2026-07-22133 minIsolated
Observation: Many failures in the June cluster have very short durations (0-25 min), suggesting infrastructure/setup failures rather than actual test failures. The normal test duration is ~65-70 min. Excluding the June cluster (likely a platform-wide issue), the pass rate would be significantly higher.
Release 4.20: e2e-azure-aks-external-oidc
Total runs197 (excl. pending/unknown)
Successes166
Failures31
Pass rate84.3%
Period2026-02-26 to 2026-08-05
Failure timeline:
DateDurationPattern
2026-02-19 - 02-2631-82 minEarly runs (4 failures)
2026-03-05 - 03-200-51 minSporadic (5 failures)
2026-04-1445 minIsolated
2026-05-01 - 05-243-53 minSporadic (3 failures)
2026-06-083 minCluster: 8 failures in 8 days
2026-06-092 min
2026-06-102 min
2026-06-113 min
2026-06-120 min
2026-06-133 min
2026-06-14 - 06-152-25 min
2026-07-07 - 07-113-80 minSporadic (3 failures)
2026-07-21129 minIsolated
Observation: The same June failure cluster appears on both 4.20 and 4.21, confirming it was a platform-wide infrastructure issue, not a test-specific problem. Failure durations of 0-3 min indicate the test never started running.
Prow summary
ReleaseRunsPass RateFailuresPeriod
4.21 199 87.4% 25 2026-02-25 to 2026-08-05
4.20 197 84.3% 31 2026-02-26 to 2026-08-05
Key context: The Sippy 100% figure reflects only the most recent ~2 weeks, during which the test has been stable. The full Prow history (5.5 months, ~200 runs per release) shows a pass rate of 84-87%, with a significant proportion of failures concentrated in a single infrastructure incident in June 2026.

Recommendations

1. Close the CI configuration gap

Add the missing e2e-azure-aks-external-oidc periodic and presubmit jobs to releases 4.22 and 5.0, mirroring the 4.21 configuration. This includes:

Job to add 4.22 5.0 Type
e2e-azure-aks-external-oidc Add Add Periodic (daily)
e2e-azure-aks-external-oidc Add Add Presubmit
e2e-azure-aks-external-oidc-techpreview Add Add Periodic (3x/month)
Rationale: The base External OIDC feature is GA since 4.20 (ExternalOIDCWithUIDAndExtraClaimMappings promoted to configv1.Default). The non-techpreview test exercises GA functionality and should exist in all active releases. The techpreview variant tests ExternalOIDCWithUpstreamParity, which is still TechPreview-only, and should be carried forward for parity with 4.21.

A dedicated Jira issue is required to track this work, as no existing issue covers the propagation gap.

2. Start as informing, then promote to blocking

Once the periodic jobs are added to 4.22 and 5.0, include them in the ARO HCP release gating pipeline as informing (not blocking) for an initial observation period.

Why not immediately blocking?

The pass rate data from existing releases is encouraging but does not guarantee the same behavior on newer releases:

Raw pass rate (Prow, 5.5 months)84.3% (4.20) / 87.4% (4.21)
Adjusted pass rate (excluding June infra cluster)~88-92% estimated
Recent trend (Sippy, last 2 weeks)100% on both releases

The raw pass rate of 84-87% includes a concentrated cluster of 8 infrastructure failures in June 2026 (identical on both 4.20 and 4.21, durations of 0-3 minutes indicating the test never started). Excluding this platform-wide incident, the effective pass rate is higher. The recent 2-week window shows 100% stability.

However, the 4.22 and 5.0 periodic jobs have zero historical data. Before promoting to blocking in the release gating pipeline, we need to:

  1. Confirm the test runs cleanly on these releases (new platform versions, new dependencies)
  2. Collect enough data points to establish a reliable baseline (target: at least 2-4 weeks of daily runs)
  3. Verify no release-specific regressions exist
Proposed path: Add periodic jobs to 4.22/5.0 → add as informing in the ITS → monitor for 2-4 weeks → if pass rate is acceptable, promote to blocking.
3. TechPreview variant considerations

The techpreview variant (e2e-azure-aks-external-oidc-techpreview) tests ExternalOIDCWithUpstreamParity, which remains TechPreview-only. On 4.21, the periodic had only 1 run with 0% success (scheduled 3x/month via cron: 0 20 9,18,25 * *).

This variant should be propagated to 4.22/5.0 for CI coverage parity, but it is not a candidate for the release gating pipeline given its TechPreview status and lack of reliable data.

Sources