Skip to content

Comments

CNTRLPLANE-312: Add generation logic for new API fields in the Authentication CR#810

Open
ShazaAldawamneh wants to merge 2 commits intoopenshift:masterfrom
ShazaAldawamneh:CNTRLPLANE-312-L
Open

CNTRLPLANE-312: Add generation logic for new API fields in the Authentication CR#810
ShazaAldawamneh wants to merge 2 commits intoopenshift:masterfrom
ShazaAldawamneh:CNTRLPLANE-312-L

Conversation

@ShazaAldawamneh
Copy link

@ShazaAldawamneh ShazaAldawamneh commented Nov 17, 2025

Summary by CodeRabbit

  • New Features
    • External OIDC: upstream‑parity mode with user validation rules, Discovery URL propagation, and CEL-based claim validation; JWTs include these validation rules when enabled.
    • Operator enables the external OIDC pathway when the upstream‑parity feature gate is active.
  • Tests
    • Expanded upstream‑parity coverage including invalid discovery URL, claim validation, and user validation rule error cases.
  • Chores
    • Updated OpenShift module version in project dependencies.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Nov 17, 2025
@openshift-ci-robot
Copy link
Contributor

openshift-ci-robot commented Nov 17, 2025

@ShazaAldawamneh: This pull request references CNTRLPLANE-312 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.21.0" version, but no target version was set.

Details

In response to this:

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@coderabbitai
Copy link

coderabbitai bot commented Nov 17, 2025

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds upstream-parity support to External OIDC: wires user validation rules into JWT generation (behind FeatureGateExternalOIDCWithUpstreamParity), adds CEL claim validation handling, forwards issuer DiscoveryURL, extends operator gating, updates github.com/openshift/library-go version, and expands tests to cover parity error paths.

Changes

Cohort / File(s) Summary
Dependency
go.mod
Updated github.com/openshift/library-go version (single-line change).
OIDC Controller Implementation
pkg/controllers/externaloidc/externaloidc_controller.go
Added generateUserValidationRule / generateUserValidationRules; populate out.UserValidationRules when FeatureGateExternalOIDCWithUpstreamParity enabled; add CEL-based claim validation handling; propagate DiscoveryURL from issuer.
Controller Tests
pkg/controllers/externaloidc/externaloidc_controller_test.go
Enabled FeatureGateExternalOIDCWithUpstreamParity in test matrices; added tests for invalid discovery URL, missing required claim, and invalid user validation expressions under upstream-parity; minor formatting adjustments.
Operator Startup
pkg/operator/starter.go
Expanded prepareExternalOIDC gating to include FeatureGateExternalOIDCWithUpstreamParity alongside existing gates.

Sequence Diagram(s)

sequenceDiagram
    participant Operator
    participant Controller
    participant Issuer
    participant APIServer

    Operator->>Controller: enable feature gates (ExternalOIDC, AdditionalClaimMappings, UpstreamParity)
    Controller->>Issuer: read issuer configuration (issuer, mappings, discoveryURL, validation rules)
    Issuer-->>Controller: return issuer config
    Controller->>Controller: validate claim rules (including CEL) and user validation rules
    Controller->>APIServer: generate/apply JWT authenticator (Issuer, ClaimValidationRules, UserValidationRules, DiscoveryURL)
    APIServer-->>Controller: confirm apply/store
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Structure And Quality ⚠️ Warning Test cases at lines 1092-1108 and 1105-1123 have critical quality issues: missing required caBundleConfigMap setup and potential duplication of existing tests. Add caBundleConfigMap to test at line 1092; remove duplicate test at line 1105 or differentiate it; add meaningful failure messages to assertions.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding generation logic for new API fields in the Authentication CR, which aligns with the core changes across the controller implementation, tests, and operator.
Stable And Deterministic Test Names ✅ Passed All test case names are static string literals with no dynamic information that could change between runs.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 17, 2025
@openshift-ci openshift-ci bot requested review from ibihim and liouk November 17, 2025 11:09
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Nov 17, 2025

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: ShazaAldawamneh
Once this PR has been reviewed and has the lgtm label, please assign liouk for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

Copy link
Contributor

@everettraven everettraven left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall, the structure looks pretty good.

I have a handful of comments.

@ShazaAldawamneh
Copy link
Author

/retest-required

@ShazaAldawamneh
Copy link
Author

/retest-required

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 17, 2026
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 17, 2026
@ShazaAldawamneh ShazaAldawamneh changed the title [WIP]: CNTRLPLANE-312: Add generation logic for new API fields in the Authentication CR CNTRLPLANE-312: Add generation logic for new API fields in the Authentication CR Feb 17, 2026
@openshift-ci openshift-ci bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Feb 17, 2026
Copy link
Contributor

@everettraven everettraven left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few minor things. Other than that, this LGTM

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
pkg/controllers/externaloidc/externaloidc_controller.go (1)

407-418: ⚠️ Potential issue | 🟠 Major

Enforce UpstreamParity gate for CEL claim validation rules.

Line 407 ignores featureGates, so TokenValidationRuleTypeCEL rules can be emitted even when FeatureGateExternalOIDCWithUpstreamParity is off. This bypasses feature gating for new fields.

🛠️ Suggested fix
 func generateClaimValidationRules(featureGates featuregates.FeatureGate, claimValidationRules ...configv1.TokenClaimValidationRule) ([]apiserverv1beta1.ClaimValidationRule, error) {
 	out := []apiserverv1beta1.ClaimValidationRule{}
 	errs := []error{}
 	for _, claimValidationRule := range claimValidationRules {
+		if claimValidationRule.Type == configv1.TokenValidationRuleTypeCEL &&
+			!featureGates.Enabled(features.FeatureGateExternalOIDCWithUpstreamParity) {
+			errs = append(errs, fmt.Errorf("claimValidationRule.type %q requires %s feature gate", configv1.TokenValidationRuleTypeCEL, features.FeatureGateExternalOIDCWithUpstreamParity))
+			continue
+		}
 		rule, err := generateClaimValidationRule(claimValidationRule)
 		if err != nil {
 			errs = append(errs, fmt.Errorf("generating claimValidationRule: %v", err))
 			continue
 		}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 407 -
418, The loop in generateClaimValidationRules ignores the featureGates parameter
and may emit CEL-based rules regardless of the
FeatureGateExternalOIDCWithUpstreamParity flag; update
generateClaimValidationRules to check
featureGates.Has(featuregates.FeatureGateExternalOIDCWithUpstreamParity) (or
equivalent) before appending any rule whose type is TokenValidationRuleTypeCEL
(as determined from generateClaimValidationRule or the returned rule.Type), and
if the gate is off either skip that rule or return a descriptive error;
reference generateClaimValidationRules, generateClaimValidationRule,
TokenValidationRuleTypeCEL, and FeatureGateExternalOIDCWithUpstreamParity to
locate and implement the gate check.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 226-228: The code currently sets out.DiscoveryURL when
issuer.DiscoveryURL is non-empty; instead validate the URL scheme (parse
issuer.DiscoveryURL and ensure scheme == "https") before assigning to
out.DiscoveryURL and return the appropriate error for non-HTTPS or invalid URLs;
update the branch around issuer.DiscoveryURL and out.DiscoveryURL so it parses
the value (using net/url.Parse), checks u.Scheme == "https", and only then sets
out.DiscoveryURL = &issuer.DiscoveryURL, otherwise return the “invalid discovery
URL (http)” style error.

---

Outside diff comments:
In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 407-418: The loop in generateClaimValidationRules ignores the
featureGates parameter and may emit CEL-based rules regardless of the
FeatureGateExternalOIDCWithUpstreamParity flag; update
generateClaimValidationRules to check
featureGates.Has(featuregates.FeatureGateExternalOIDCWithUpstreamParity) (or
equivalent) before appending any rule whose type is TokenValidationRuleTypeCEL
(as determined from generateClaimValidationRule or the returned rule.Type), and
if the gate is off either skip that rule or return a descriptive error;
reference generateClaimValidationRules, generateClaimValidationRule,
TokenValidationRuleTypeCEL, and FeatureGateExternalOIDCWithUpstreamParity to
locate and implement the gate check.

@ShazaAldawamneh
Copy link
Author

/retest

@ShazaAldawamneh
Copy link
Author

/retest-required

@ShazaAldawamneh
Copy link
Author

/retest

@everettraven
Copy link
Contributor

Looks like the failing non-required jobs are related to in-development tests.

I'm not sure we need to be concerned about breaking them at the moment, especially because all of the other jobs are passing fine.

Copy link
Contributor

@everettraven everettraven left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aside from this still piping through unused feature gate parameters, the changes LGTM.

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 24, 2026
@openshift-ci-robot
Copy link
Contributor

openshift-ci-robot commented Feb 24, 2026

@ShazaAldawamneh: This pull request references CNTRLPLANE-312 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features
  • External OIDC now supports upstream parity mode with user validation rules
  • Discovery URL propagation from issuer configuration
  • CEL-based claim validation for OIDC providers

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
pkg/controllers/externaloidc/externaloidc_controller.go (1)

226-228: ⚠️ Potential issue | 🟠 Major

Validate DiscoveryURL scheme before setting it.

Line 226 currently accepts any non-empty value; this allows insecure or malformed endpoints and conflicts with the “invalid discovery URL (http)” expectation.

🔒 Proposed fix
-	if len(issuer.DiscoveryURL) > 0 {
-		out.DiscoveryURL = &issuer.DiscoveryURL
-	}
+	if len(issuer.DiscoveryURL) > 0 {
+		parsed, err := url.Parse(issuer.DiscoveryURL)
+		if err != nil || parsed.Scheme != "https" || parsed.Host == "" {
+			return apiserverv1beta1.Issuer{}, fmt.Errorf("discoveryURL must be a valid https URL: %q", issuer.DiscoveryURL)
+		}
+		out.DiscoveryURL = &issuer.DiscoveryURL
+	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 226 -
228, Validate the issuer.DiscoveryURL before assigning it to out.DiscoveryURL:
parse issuer.DiscoveryURL (e.g., using url.Parse), ensure it is a well-formed
URL and that its scheme is "https" (reject "http" or other schemes), and only
set out.DiscoveryURL = &issuer.DiscoveryURL when the parse succeeds and scheme
== "https"; if parsing fails or the scheme is not "https", return or surface an
appropriate validation error instead of assigning the value (refer to
issuer.DiscoveryURL and out.DiscoveryURL in externaloidc_controller.go).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 463-492: The generateUserValidationRule functions currently don't
validate CEL expressions; update generateUserValidationRule to compile the
rule.Expression using the authenticationcel.UserValidationCondition and the
compiler. Use the compiler.CompileUserExpression(...,
authenticationcel.UserValidationCondition) call (matching the claim validation
pattern) and return a descriptive error if compilation fails; keep
generateUserValidationRules behavior but propagate compilation errors so invalid
expressions are rejected at config time.
- Around line 441-454: The code is using
authenticationcel.ClaimMappingExpression (meant for claim mappings returning
AnyType) when validating claimValidationRule.CEL.Expression; change the
validation to use authenticationcel.ClaimValidationCondition (which returns
BoolType) instead and pass the value (not a pointer) from
claimValidationRule.CEL into validateCELExpression. Specifically, update the
call to validateCELExpression to construct an
authenticationcel.ClaimValidationCondition with Expression set from
claimValidationRule.CEL.Expression (and Message if needed), keep the existing
error handling, and leave out.Expression and out.Message assignments as they
are.

---

Duplicate comments:
In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 226-228: Validate the issuer.DiscoveryURL before assigning it to
out.DiscoveryURL: parse issuer.DiscoveryURL (e.g., using url.Parse), ensure it
is a well-formed URL and that its scheme is "https" (reject "http" or other
schemes), and only set out.DiscoveryURL = &issuer.DiscoveryURL when the parse
succeeds and scheme == "https"; if parsing fails or the scheme is not "https",
return or surface an appropriate validation error instead of assigning the value
(refer to issuer.DiscoveryURL and out.DiscoveryURL in
externaloidc_controller.go).

ℹ️ Review info

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between f2a9411 and 22caac5.

📒 Files selected for processing (1)
  • pkg/controllers/externaloidc/externaloidc_controller.go

@openshift-ci-robot
Copy link
Contributor

openshift-ci-robot commented Feb 24, 2026

@ShazaAldawamneh: This pull request references CNTRLPLANE-312 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features
  • External OIDC: upstream parity mode with user validation rules, Discovery URL propagation, and CEL-based claim validation.
  • Tests
  • Expanded tests for upstream parity, including invalid discovery URL, claim validation, and user validation rule error cases.
  • Chores
  • Updated module versions in project dependencies.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (3)
pkg/controllers/externaloidc/externaloidc_controller.go (3)

463-471: ⚠️ Potential issue | 🟠 Major

generateUserValidationRule performs no CEL expression validation.

Only a non-empty check is present; invalid CEL will only surface at runtime during token evaluation. This was flagged in a previous review and remains unaddressed.

An important additional constraint: the existing validateCELExpression helper (line 607) calls CompileClaimsExpression, which compiles in the JWT-claims CEL environment. User validation rules evaluate against the user (authentication.k8s.io/v1 UserInfo) object, so a separate helper calling compiler.CompileUserExpression with authenticationcel.UserValidationCondition is required — reusing validateCELExpression directly would produce incorrect compilation semantics.

🛠️ Suggested approach

Add a dedicated helper and call it from generateUserValidationRule:

+func validateUserValidationCELExpression(expressionAccessor authenticationcel.ExpressionAccessor) error {
+	_, err := authenticationcel.NewDefaultCompiler().CompileUserExpression(expressionAccessor)
+	return err
+}
 func generateUserValidationRule(rule configv1.TokenUserValidationRule) (apiserverv1beta1.UserValidationRule, error) {
 	if len(rule.Expression) == 0 {
 		return apiserverv1beta1.UserValidationRule{}, fmt.Errorf("userValidationRule expression must be non-empty")
 	}
+	if err := validateUserValidationCELExpression(&authenticationcel.UserValidationCondition{
+		Expression: rule.Expression,
+	}); err != nil {
+		return apiserverv1beta1.UserValidationRule{}, fmt.Errorf("invalid CEL expression: %v", err)
+	}
 	return apiserverv1beta1.UserValidationRule{
 		Expression: rule.Expression,
 		Message:    rule.Message,
 	}, nil
 }

Run the following to confirm that CompileUserExpression and UserValidationCondition are available in the vendored authenticationcel package:

#!/bin/bash
# Description: Verify CompileUserExpression and UserValidationCondition exist in the vendored authenticationcel package.
rg -n "CompileUserExpression\|UserValidationCondition" vendor/k8s.io/apiserver/pkg/authentication/cel/ --type go
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 463 -
471, generateUserValidationRule currently only checks for non-empty Expression
and doesn't validate the CEL against the UserInfo environment; add a new helper
(e.g., validateUserCELExpression) that calls compiler.CompileUserExpression with
authenticationcel.UserValidationCondition to compile the rule expression, and
invoke this helper from generateUserValidationRule to return any compilation
error instead of deferring failures to runtime; do not reuse
validateCELExpression (it uses CompileClaimsExpression), and ensure
generateUserValidationRule propagates the compile error and only returns the
apiserverv1beta1.UserValidationRule when compilation succeeds.

447-451: ⚠️ Potential issue | 🟠 Major

ClaimMappingExpression is the wrong CEL accessor type for claim validation rules.

ClaimMappingExpression compiles the expression expecting AnyType return (it is designed for claim-to-value mappings). A claim validation rule must evaluate to a boolean; the correct accessor is authenticationcel.ClaimValidationCondition, which instructs the compiler to enforce BoolType. Using the mapping type here means a CEL expression returning a non-boolean (e.g., a string) will pass compile-time validation but fail at runtime token evaluation.

🛠️ Suggested fix
-		if err := validateCELExpression(&authenticationcel.ClaimMappingExpression{
-			Expression: claimValidationRule.CEL.Expression,
-		}); err != nil {
+		if err := validateCELExpression(&authenticationcel.ClaimValidationCondition{
+			Expression: claimValidationRule.CEL.Expression,
+		}); err != nil {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 447 -
451, The code uses authenticationcel.ClaimMappingExpression when calling
validateCELExpression for claimValidationRule, which allows non-boolean results;
change the CEL accessor to authenticationcel.ClaimValidationCondition so the
compiler enforces BoolType. Concretely, update the validateCELExpression call
that currently constructs &authenticationcel.ClaimMappingExpression{Expression:
claimValidationRule.CEL.Expression} to instead construct
&authenticationcel.ClaimValidationCondition{Expression:
claimValidationRule.CEL.Expression} (leave validateCELExpression and
claimValidationRule references unchanged).

226-228: ⚠️ Potential issue | 🟠 Major

DiscoveryURL is propagated without HTTPS scheme validation.

Any non-empty string passes — including http:// URLs — which allows insecure metadata endpoints to be accepted silently. This was flagged in a prior review and remains unresolved.

🛠️ Suggested fix
 	if len(issuer.DiscoveryURL) > 0 {
-		out.DiscoveryURL = &issuer.DiscoveryURL
+		parsed, err := url.Parse(issuer.DiscoveryURL)
+		if err != nil || parsed.Scheme != "https" || parsed.Host == "" {
+			return apiserverv1beta1.Issuer{}, fmt.Errorf("discoveryURL must be a valid https URL: %q", issuer.DiscoveryURL)
+		}
+		out.DiscoveryURL = &issuer.DiscoveryURL
 	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 226 -
228, The DiscoveryURL is assigned without validating its scheme; update the
logic around issuer.DiscoveryURL → out.DiscoveryURL in
externaloidc_controller.go to only propagate non-empty values that use the HTTPS
scheme (e.g., validate that issuer.DiscoveryURL starts with "https://" or parse
with url.Parse and ensure Scheme == "https"); if the URL is not HTTPS, do not
set out.DiscoveryURL and optionally surface/return an error or log a warning
from the surrounding reconcile/validation function so insecure HTTP endpoints
are rejected.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 463-471: generateUserValidationRule currently only checks for
non-empty Expression and doesn't validate the CEL against the UserInfo
environment; add a new helper (e.g., validateUserCELExpression) that calls
compiler.CompileUserExpression with authenticationcel.UserValidationCondition to
compile the rule expression, and invoke this helper from
generateUserValidationRule to return any compilation error instead of deferring
failures to runtime; do not reuse validateCELExpression (it uses
CompileClaimsExpression), and ensure generateUserValidationRule propagates the
compile error and only returns the apiserverv1beta1.UserValidationRule when
compilation succeeds.
- Around line 447-451: The code uses authenticationcel.ClaimMappingExpression
when calling validateCELExpression for claimValidationRule, which allows
non-boolean results; change the CEL accessor to
authenticationcel.ClaimValidationCondition so the compiler enforces BoolType.
Concretely, update the validateCELExpression call that currently constructs
&authenticationcel.ClaimMappingExpression{Expression:
claimValidationRule.CEL.Expression} to instead construct
&authenticationcel.ClaimValidationCondition{Expression:
claimValidationRule.CEL.Expression} (leave validateCELExpression and
claimValidationRule references unchanged).
- Around line 226-228: The DiscoveryURL is assigned without validating its
scheme; update the logic around issuer.DiscoveryURL → out.DiscoveryURL in
externaloidc_controller.go to only propagate non-empty values that use the HTTPS
scheme (e.g., validate that issuer.DiscoveryURL starts with "https://" or parse
with url.Parse and ensure Scheme == "https"); if the URL is not HTTPS, do not
set out.DiscoveryURL and optionally surface/return an error or log a warning
from the surrounding reconcile/validation function so insecure HTTP endpoints
are rejected.

ℹ️ Review info

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 22caac5 and 70daaf2.

⛔ Files ignored due to path filters (32)
  • go.sum is excluded by !**/*.sum
  • vendor/github.com/openshift/api/.coderabbit.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apiextensions/v1alpha1/types_compatibilityrequirement.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/apiextensions/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/types_insights.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/types_tlssecurityprofile.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/register.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_cluster_monitoring.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_crio_credential_provider_config.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/types_insights.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/config/v1alpha2/types_insights.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/config/v1alpha2/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/features.md is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/features.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/features/legacyfeaturegates.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/machine/v1beta1/types_awsprovider.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/machine/v1beta1/zz_generated.deepcopy.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/machine/v1beta1/zz_generated.swagger_doc_generated.go is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/api/operator/v1/types_network.go is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-Default.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_machine-config_01_machineconfigurations-OKD.crd.yaml is excluded by !**/vendor/**, !vendor/**
  • vendor/github.com/openshift/api/operator/v1/zz_generated.featuregated-crd-manifests.yaml is excluded by !**/vendor/**, !vendor/**, !**/zz_generated*
  • vendor/github.com/openshift/library-go/pkg/crypto/crypto.go is excluded by !**/vendor/**, !vendor/**
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (4)
  • go.mod
  • pkg/controllers/externaloidc/externaloidc_controller.go
  • pkg/controllers/externaloidc/externaloidc_controller_test.go
  • pkg/operator/starter.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • go.mod
  • pkg/operator/starter.go
  • pkg/controllers/externaloidc/externaloidc_controller_test.go

@openshift-ci-robot
Copy link
Contributor

openshift-ci-robot commented Feb 25, 2026

@ShazaAldawamneh: This pull request references CNTRLPLANE-312 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features
  • External OIDC: upstream-parity mode with user validation rules, Discovery URL propagation, and CEL-based claim validation; JWTs now include these validation rules when enabled.
  • Operator now enables the external OIDC pathway when the upstream-parity feature gate is active.
  • Tests
  • Expanded upstream-parity test coverage including invalid discovery URL, claim validation, and user validation rule error cases.
  • Chores
  • Updated OpenShift module versions in project dependencies.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Signed-off-by: Shaza Aldawamneh <shaza.aldawamneh@hotmail.com>
Signed-off-by: Shaza Aldawamneh <shaza.aldawamneh@hotmail.com>
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Feb 25, 2026
@openshift-ci-robot
Copy link
Contributor

openshift-ci-robot commented Feb 25, 2026

@ShazaAldawamneh: This pull request references CNTRLPLANE-312 which is a valid jira issue.

Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features
  • External OIDC: upstream‑parity mode with user validation rules, Discovery URL propagation, and CEL-based claim validation; JWTs include these validation rules when enabled.
  • Operator enables the external OIDC pathway when the upstream‑parity feature gate is active.
  • Tests
  • Expanded upstream‑parity coverage including invalid discovery URL, claim validation, and user validation rule error cases.
  • Chores
  • Updated OpenShift module version in project dependencies.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (2)
pkg/controllers/externaloidc/externaloidc_controller_test.go (1)

1124-1141: ⚠️ Potential issue | 🟠 Major

Test never reaches user-validation-rule logic due to missing CA bundle.

generateJWTForProvider calls generateIssuer first; with caBundleConfigMap absent the CA lookup for oidc-ca-bundle fails and the function returns before generateUserValidationRules (lines 196-202 of the controller) is ever invoked. The test's expectError: true is satisfied by the wrong error.

Add caBundleConfigMap: &baseCABundleConfigMap (and set Issuer.URL to skip the live-URL validation) so the test actually exercises the empty-expression guard in generateUserValidationRule.

🛠️ Suggested fix
 		{
 			name: "user validation rule invalid  expression",
+			caBundleConfigMap: &baseCABundleConfigMap,
 			auth: *authWithUpdates(baseAuthResource, []func(auth *configv1.Authentication){
 				func(auth *configv1.Authentication) {
+					auth.Spec.OIDCProviders[0].Issuer.URL = "https://example.com"
 					auth.Spec.OIDCProviders[0].UserValidationRules = []configv1.TokenUserValidationRule{
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller_test.go` around lines
1124 - 1141, The test case for "user validation rule invalid expression" is
returning early due to a missing CA bundle so generateIssuer exits before
generateUserValidationRules runs; update the test's test vector to include
caBundleConfigMap: &baseCABundleConfigMap and set the auth fixture's Issuer.URL
to a non-empty/safe value so live-URL validation is skipped, ensuring
generateJWTForProvider calls generateUserValidationRules and the empty
Expression guard in generateUserValidationRule (functions
generateJWTForProvider, generateIssuer, generateUserValidationRules) is
exercised and the expectError reflects that validation.
pkg/controllers/externaloidc/externaloidc_controller.go (1)

226-228: ⚠️ Potential issue | 🟠 Major

DiscoveryURL assigned without HTTPS scheme validation.

Any non-empty string (including http:// or malformed URLs) is forwarded to out.DiscoveryURL. This was flagged in the prior review cycle and agreed upon, but remains unimplemented. The new test "invalid discovery URL (http instead of https)" is predicated on this check existing.

net/url is already imported; the fix is straightforward:

🛠️ Proposed fix
-	if len(issuer.DiscoveryURL) > 0 {
-		out.DiscoveryURL = &issuer.DiscoveryURL
-	}
+	if len(issuer.DiscoveryURL) > 0 {
+		parsed, err := url.Parse(issuer.DiscoveryURL)
+		if err != nil || parsed.Scheme != "https" || parsed.Host == "" {
+			return apiserverv1beta1.Issuer{}, fmt.Errorf("discoveryURL must be a valid https URL: %q", issuer.DiscoveryURL)
+		}
+		out.DiscoveryURL = &issuer.DiscoveryURL
+	}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 226 -
228, The assignment to out.DiscoveryURL must validate issuer.DiscoveryURL is a
well-formed HTTPS URL; update the block that currently checks
len(issuer.DiscoveryURL) and sets out.DiscoveryURL to instead parse
issuer.DiscoveryURL with net/url.Parse, ensure url.Scheme == "https" and
url.Host is non-empty, and only then set out.DiscoveryURL =
&issuer.DiscoveryURL; keep the value unset for non-HTTPS or malformed URLs (this
will satisfy the "invalid discovery URL (http instead of https)" test).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@pkg/controllers/externaloidc/externaloidc_controller_test.go`:
- Around line 1092-1104: The test case is failing for the wrong reason because
no CA bundle is provided and the controller lacks DiscoveryURL scheme
validation; update the test case entry (the table row with name "invalid
discovery URL (http instead of https)") to include caBundleConfigMap:
&baseCABundleConfigMap and set a valid Issuer.URL so generateIssuer runs past CA
lookup, and then implement a scheme check in the controller where DiscoveryURL
is assigned (the code path around generateIssuer and the assignment to
auth.Spec.OIDCProviders[0].Issuer.DiscoveryURL — see generateIssuer and the
controller lines that set DiscoveryURL) to reject or error on non-HTTPS schemes
(i.e., require URL.Scheme == "https") so the test actually triggers the intended
validation error.
- Around line 1105-1123: This test is a duplicate that fails for the wrong
reason; either remove the test case named "claim validation rule missing
required claim" or modify its auth fixture so it actually exercises
claim-validation (not CA lookup) by adding caBundleConfigMap:
&baseCABundleConfigMap to the auth produced by authWithUpdates (or otherwise
ensure a valid CA bundle) so generateIssuer succeeds and
generateClaimValidationRules runs; keep the RequiredClaim: nil to preserve the
intended assertion if you choose to keep and rename the case to avoid
duplication with the existing "auth config with nil claim in validation rule"
test.

In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 463-479: The helper validateCELExpression currently always calls
compiler.CompileClaimsExpression which is incorrect for user rules; update
validation to call compiler.CompileUserExpression when given an
authenticationcel.UserValidationCondition (and keep CompileClaimsExpression for
claim conditions), or create a dedicated validateCELUserExpression that calls
CompileUserExpression for UserValidationCondition and use that from
generateUserValidationRule; reference validateCELExpression,
authenticationcel.UserValidationCondition, compiler.CompileUserExpression and
compiler.CompileClaimsExpression to locate and change the call routing so user
expressions are compiled in the user.* CEL environment.

---

Duplicate comments:
In `@pkg/controllers/externaloidc/externaloidc_controller_test.go`:
- Around line 1124-1141: The test case for "user validation rule invalid
expression" is returning early due to a missing CA bundle so generateIssuer
exits before generateUserValidationRules runs; update the test's test vector to
include caBundleConfigMap: &baseCABundleConfigMap and set the auth fixture's
Issuer.URL to a non-empty/safe value so live-URL validation is skipped, ensuring
generateJWTForProvider calls generateUserValidationRules and the empty
Expression guard in generateUserValidationRule (functions
generateJWTForProvider, generateIssuer, generateUserValidationRules) is
exercised and the expectError reflects that validation.

In `@pkg/controllers/externaloidc/externaloidc_controller.go`:
- Around line 226-228: The assignment to out.DiscoveryURL must validate
issuer.DiscoveryURL is a well-formed HTTPS URL; update the block that currently
checks len(issuer.DiscoveryURL) and sets out.DiscoveryURL to instead parse
issuer.DiscoveryURL with net/url.Parse, ensure url.Scheme == "https" and
url.Host is non-empty, and only then set out.DiscoveryURL =
&issuer.DiscoveryURL; keep the value unset for non-HTTPS or malformed URLs (this
will satisfy the "invalid discovery URL (http instead of https)" test).

ℹ️ Review info

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro

Cache: Disabled due to data retention organization setting

Knowledge base: Disabled due to data retention organization setting

📥 Commits

Reviewing files that changed from the base of the PR and between 6871f41 and 8b5fbf8.

⛔ Files ignored due to path filters (2)
  • go.sum is excluded by !**/*.sum
  • vendor/modules.txt is excluded by !**/vendor/**, !vendor/**
📒 Files selected for processing (4)
  • go.mod
  • pkg/controllers/externaloidc/externaloidc_controller.go
  • pkg/controllers/externaloidc/externaloidc_controller_test.go
  • pkg/operator/starter.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • pkg/operator/starter.go
  • go.mod

Comment on lines +1092 to +1104
{
name: "invalid discovery URL (http instead of https)",
auth: *authWithUpdates(baseAuthResource, []func(auth *configv1.Authentication){
func(auth *configv1.Authentication) {
auth.Spec.OIDCProviders[0].Issuer.DiscoveryURL = "http://insecure-url.com"
},
}),
expectError: true,
featureGates: featuregates.NewFeatureGate(
[]configv1.FeatureGateName{features.FeatureGateExternalOIDCWithUpstreamParity},
[]configv1.FeatureGateName{},
),
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Test triggers the wrong error and controller lacks DiscoveryURL scheme validation.

Two compounding issues:

  1. No caBundleConfigMap is provided, so generateIssuer will fail on the CA bundle lookup (oidc-ca-bundle absent from indexer) before reaching the DiscoveryURL assignment at line 226 of the controller. The test gets expectError: true satisfied, but for the wrong reason.

  2. The controller code (lines 226-228) unconditionally assigns any non-empty DiscoveryURL without an HTTPS scheme check, so even with a proper CA bundle the http://insecure-url.com value would be accepted silently — the test would then become a false negative.

To make this test meaningful: add caBundleConfigMap: &baseCABundleConfigMap to the test case, set a valid Issuer.URL, and ensure the scheme validation is implemented in the controller (see comment on controller lines 226-228).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller_test.go` around lines
1092 - 1104, The test case is failing for the wrong reason because no CA bundle
is provided and the controller lacks DiscoveryURL scheme validation; update the
test case entry (the table row with name "invalid discovery URL (http instead of
https)") to include caBundleConfigMap: &baseCABundleConfigMap and set a valid
Issuer.URL so generateIssuer runs past CA lookup, and then implement a scheme
check in the controller where DiscoveryURL is assigned (the code path around
generateIssuer and the assignment to
auth.Spec.OIDCProviders[0].Issuer.DiscoveryURL — see generateIssuer and the
controller lines that set DiscoveryURL) to reject or error on non-HTTPS schemes
(i.e., require URL.Scheme == "https") so the test actually triggers the intended
validation error.

Comment on lines +1105 to +1123
{
name: "claim validation rule missing required claim",
auth: *authWithUpdates(baseAuthResource, []func(auth *configv1.Authentication){
func(auth *configv1.Authentication) {
auth.Spec.OIDCProviders[0].ClaimValidationRules = append(
auth.Spec.OIDCProviders[0].ClaimValidationRules,
configv1.TokenClaimValidationRule{
Type: configv1.TokenValidationRuleTypeRequiredClaim,
RequiredClaim: nil,
},
)
},
}),
expectError: true,
featureGates: featuregates.NewFeatureGate(
[]configv1.FeatureGateName{features.FeatureGateExternalOIDCWithUpstreamParity},
[]configv1.FeatureGateName{},
),
},
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Duplicate test that also fires the wrong error.

This test case replicates the existing "auth config with nil claim in validation rule" scenario (lines 701–727), which already covers RequiredClaim: nil with a properly configured CA bundle. Additionally, the missing caBundleConfigMap field means generateIssuer returns a CA-lookup error before generateClaimValidationRules is ever reached, so the test verifies the wrong failure path.

Either remove it (it adds no new coverage) or differentiate it and add caBundleConfigMap: &baseCABundleConfigMap so it actually exercises claim validation rule processing.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller_test.go` around lines
1105 - 1123, This test is a duplicate that fails for the wrong reason; either
remove the test case named "claim validation rule missing required claim" or
modify its auth fixture so it actually exercises claim-validation (not CA
lookup) by adding caBundleConfigMap: &baseCABundleConfigMap to the auth produced
by authWithUpdates (or otherwise ensure a valid CA bundle) so generateIssuer
succeeds and generateClaimValidationRules runs; keep the RequiredClaim: nil to
preserve the intended assertion if you choose to keep and rename the case to
avoid duplication with the existing "auth config with nil claim in validation
rule" test.

Comment on lines +463 to +479
func generateUserValidationRule(rule configv1.TokenUserValidationRule) (apiserverv1beta1.UserValidationRule, error) {
if len(rule.Expression) == 0 {
return apiserverv1beta1.UserValidationRule{}, fmt.Errorf("userValidationRule expression must be non-empty")
}

// validate CEL expression
if err := validateCELExpression(&authenticationcel.UserValidationCondition{
Expression: rule.Expression,
}); err != nil {
return apiserverv1beta1.UserValidationRule{}, fmt.Errorf("invalid CEL expression: %v", err)
}

return apiserverv1beta1.UserValidationRule{
Expression: rule.Expression,
Message: rule.Message,
}, nil
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# First, verify the file structure and check lines around 463-479
echo "=== Checking externaloidc_controller.go lines 463-500 ==="
head -n 500 pkg/controllers/externaloidc/externaloidc_controller.go | tail -n 50 | cat -n

Repository: openshift/cluster-authentication-operator

Length of output: 1872


🏁 Script executed:

#!/bin/bash
# Check if CompileUserExpression exists in authenticationcel compiler
echo "=== Searching for CompileUserExpression and CompileClaimsExpression ==="
rg -n "CompileUserExpression|CompileClaimsExpression" \
  vendor/k8s.io/apiserver/pkg/authentication/cel/ --type go -A 3

Repository: openshift/cluster-authentication-operator

Length of output: 2135


🏁 Script executed:

#!/bin/bash
# Check the validateCELExpression function implementation
echo "=== Checking validateCELExpression implementation ==="
rg -n "func validateCELExpression" pkg/controllers/externaloidc/ --type go -A 10

Repository: openshift/cluster-authentication-operator

Length of output: 578


validateCELExpression uses CompileClaimsExpression — wrong for user-validation expressions.

validateCELExpression (line 614) unconditionally calls compiler.CompileClaimsExpression(expressionAccessor). User-validation rules evaluate against a user.* environment (user.username, user.groups, etc.), whereas claim-validation rules evaluate against claims.*. The authenticationcel compiler provides both CompileUserExpression() and CompileClaimsExpression() for exactly this purpose.

Compiling a UserValidationCondition through the claims-expression compiler means validation occurs in the wrong CEL variable scope, potentially accepting invalid expressions that reference nonexistent user.* variables or rejecting valid ones.

Use compiler.CompileUserExpression(expressionAccessor) when validating UserValidationCondition, and route based on expression type if validateCELExpression is reused across both claim and user validation.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@pkg/controllers/externaloidc/externaloidc_controller.go` around lines 463 -
479, The helper validateCELExpression currently always calls
compiler.CompileClaimsExpression which is incorrect for user rules; update
validation to call compiler.CompileUserExpression when given an
authenticationcel.UserValidationCondition (and keep CompileClaimsExpression for
claim conditions), or create a dedicated validateCELUserExpression that calls
CompileUserExpression for UserValidationCondition and use that from
generateUserValidationRule; reference validateCELExpression,
authenticationcel.UserValidationCondition, compiler.CompileUserExpression and
compiler.CompileClaimsExpression to locate and change the call routing so user
expressions are compiled in the user.* CEL environment.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 25, 2026

@ShazaAldawamneh: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-aws-operator-serial-ote 8b5fbf8 link false /test e2e-aws-operator-serial-ote
ci/prow/e2e-aws-operator-parallel-ote 8b5fbf8 link false /test e2e-aws-operator-parallel-ote
ci/prow/e2e-aws-operator-encryption-perf-serial-ote-2of2 8b5fbf8 link false /test e2e-aws-operator-encryption-perf-serial-ote-2of2
ci/prow/e2e-aws-operator-encryption-rotation-serial-ote-1of2 8b5fbf8 link false /test e2e-aws-operator-encryption-rotation-serial-ote-1of2
ci/prow/e2e-aws-operator-encryption-serial-ote-2of2 8b5fbf8 link false /test e2e-aws-operator-encryption-serial-ote-2of2
ci/prow/e2e-aws-operator-encryption-rotation-serial-ote-2of2 8b5fbf8 link false /test e2e-aws-operator-encryption-rotation-serial-ote-2of2
ci/prow/e2e-aws-operator-encryption-kms-serial-ote-1of2 8b5fbf8 link false /test e2e-aws-operator-encryption-kms-serial-ote-1of2
ci/prow/e2e-aws-operator-encryption-perf-serial-ote-1of2 8b5fbf8 link false /test e2e-aws-operator-encryption-perf-serial-ote-1of2
ci/prow/e2e-aws-operator-encryption-serial-ote-1of2 8b5fbf8 link false /test e2e-aws-operator-encryption-serial-ote-1of2
ci/prow/e2e-gcp-operator-encryption-kms 8b5fbf8 link false /test e2e-gcp-operator-encryption-kms
ci/prow/e2e-aws-operator-encryption-kms-serial-ote-2of2 8b5fbf8 link false /test e2e-aws-operator-encryption-kms-serial-ote-2of2

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants