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
Last updated: 2026-08-05 · Investigator: Alessandro Rossi
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:
e2e-azure-aks-ovn-conformance be promoted from informing to blocking?e2e-azure-aks-external-oidc not exist for 4.22/5.0, and should it be added?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)e2e-azure-aks-ovn-conformance (5.0) - see conformance test reportThe investigation must determine:
| Job | Releases | Schedule | Description |
|---|---|---|---|
| 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 |
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.
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:
Top-level feature request. Confirmed GA.
Epic. Owner: Ilias Rinis. Contains all implementation and testing stories.
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.
Verified in the HyperShift codebase (control-plane-operator/featuregates/featuregates.go):
| Feature Gate | Enabled For | Status |
|---|---|---|
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.
e2e-azure-aks-external-oidc) exercises GA functionality and should exist in all active releases.
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.
We audited all related Jira issues under the CNTRLPLANE-883 epic to determine whether any issue had the propagation in scope:
Assigned: Xingxing Xia. Closed in favor of AUTH-553. No propagation scope.
Assigned: Xingxing Xia. Closed as obsolete: "Pre-merge test was done in some Stories."
Assigned: Xingxing Xia. Closed as obsolete: "tracked in other Stories like CNTRLPLANE-946, or covered by AUTH-554."
Assigned: Xingxing Xia. Closed with three "time debt" items moved out (AUTH-560, AUTH-569, AUTH-575) - none related to version propagation.
| Issue | Summary | Scope |
|---|---|---|
| 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 |
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.
| Property | Azure AKS variant | AWS 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+ |
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 |
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) |
Figure 1: Sippy Job Health for 4.20, filtered by e2e-azure-aks-external-oidc. Source: Sippy Job Health
Figure 2: Sippy Job Analysis for 4.20. 13 runs, 13 successful. Source: Sippy Job Analysis
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
Figure 4: Sippy Job Analysis for 4.21 non-techpreview. 13 runs, 13 successful. Source: Sippy Job Analysis
Figure 5: Sippy Job Analysis for 4.21 techpreview. 1 run, 0 successful. Source: Sippy Job Analysis
| Job | Release | Current | Runs | Previous | Runs |
|---|---|---|---|---|---|
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 |
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.
| Total runs | 199 |
| Successes | 174 |
| Failures | 25 |
| Pass rate | 87.4% |
| Period | 2026-02-25 to 2026-08-05 |
| Date | Duration | Pattern |
|---|---|---|
| 2026-02-26 | 61 min | Early runs |
| 2026-03-02 | 53 min | |
| 2026-03-18 - 03-19 | 0-50 min | |
| 2026-03-26 | 23 min | Isolated |
| 2026-04-03 - 04-14 | 20-48 min | Sporadic |
| 2026-05-22 | 25 min | Isolated |
| 2026-06-02 | 24 min | Cluster: 8 failures in 8 days |
| 2026-06-09 | 26 min | |
| 2026-06-10 | 25 min | |
| 2026-06-11 | 18 min | |
| 2026-06-12 | 0 min | |
| 2026-06-13 | 11 min | |
| 2026-06-14 - 06-16 | 3-9 min | |
| 2026-07-01 - 07-11 | 18-71 min | Sporadic (3 failures) |
| 2026-07-22 | 133 min | Isolated |
| Total runs | 197 (excl. pending/unknown) |
| Successes | 166 |
| Failures | 31 |
| Pass rate | 84.3% |
| Period | 2026-02-26 to 2026-08-05 |
| Date | Duration | Pattern |
|---|---|---|
| 2026-02-19 - 02-26 | 31-82 min | Early runs (4 failures) |
| 2026-03-05 - 03-20 | 0-51 min | Sporadic (5 failures) |
| 2026-04-14 | 45 min | Isolated |
| 2026-05-01 - 05-24 | 3-53 min | Sporadic (3 failures) |
| 2026-06-08 | 3 min | Cluster: 8 failures in 8 days |
| 2026-06-09 | 2 min | |
| 2026-06-10 | 2 min | |
| 2026-06-11 | 3 min | |
| 2026-06-12 | 0 min | |
| 2026-06-13 | 3 min | |
| 2026-06-14 - 06-15 | 2-25 min | |
| 2026-07-07 - 07-11 | 3-80 min | Sporadic (3 failures) |
| 2026-07-21 | 129 min | Isolated |
| Release | Runs | Pass Rate | Failures | Period |
|---|---|---|---|---|
| 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 |
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) |
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.
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.
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:
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.
control-plane-operator/featuregates/featuregates.go - Feature gate definitions confirming GA status