Skip to content

DNM/SPLAT-2672: e2e/ote/ccm-aws: moving binary cccmo project#437

Draft
mtulio wants to merge 2 commits intoopenshift:mainfrom
mtulio:e2e-ote-ccm-aws
Draft

DNM/SPLAT-2672: e2e/ote/ccm-aws: moving binary cccmo project#437
mtulio wants to merge 2 commits intoopenshift:mainfrom
mtulio:e2e-ote-ccm-aws

Conversation

@mtulio
Copy link
Contributor

@mtulio mtulio commented Mar 11, 2026

Blocks:

Summary by CodeRabbit

  • New Features

    • Added an AWS tests extension providing end-to-end suites that validate Network Load Balancer security group behavior and feature‑gate interactions.
  • Documentation

    • Added a comprehensive README with prerequisites, build/run instructions, test usage, and examples.
  • Chores

    • Updated build and container packaging to include the new test binary and reduced Docker build context via ignore rules.

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Mar 11, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 11, 2026

@mtulio: This pull request references SPLAT-2672 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 task to target the "4.22.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.

@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 Mar 11, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@coderabbitai
Copy link

coderabbitai bot commented Mar 11, 2026

Walkthrough

Adds an AWS CCM tests extension: new test runner binary, module and deps, Docker/Make build updates, README, AWS/OpenShift e2e helpers, and a Network Load Balancer security-group focused e2e test suite.

Changes

Cohort / File(s) Summary
Docker Configuration
./.dockerignore, Dockerfile
Adds .dockerignore; Dockerfile now gzips the new test binary in the builder stage and copies the gzipped artifact into the final image.
Build Configuration
Makefile
Adds cloud-controller-manager-aws-tests-ext target and makes build depend on it so the new binary is produced.
Module Setup
cmd/cloud-controller-manager-aws-tests-ext/go.mod
Introduces a new Go module for the tests extension with extensive requires and replace directives (AWS SDK v2, k8s.io, ginkgo, OpenShift test libs).
Test Binary Entrypoint
cmd/cloud-controller-manager-aws-tests-ext/main.go
Adds CLI entrypoint that registers and filters AWS CCM test specs, initializes test framework (region/KUBECONFIG handling), and runs tests via the OpenShift tests extension framework.
E2E Helpers
cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
Adds AWS/OpenShift helper utilities: AWS ELBv2/EC2 clients, load balancer lookup/pagination, security group retrieval/aggregation, FeatureGate checks, and not-found error handling.
NLB Security Group Tests
cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go
Adds extensive NLB-focused e2e tests: feature-gate and cloud-config checks, create/verify/delete NLB Services, resolve LB DNS to AWS metadata, assert SG attachments and rule updates, and cleanup polling.
Documentation
cmd/cloud-controller-manager-aws-tests-ext/README.md
Adds README documenting purpose, directory layout, build/run instructions, example commands, and a high-level flowchart for the tests extension.

Sequence Diagram(s)

sequenceDiagram
    participant Runner as Test Runner
    participant Framework as Test Framework
    participant K8s as Kubernetes API
    participant AWS as AWS SDK
    participant Cloud as Cloud Config

    Runner->>Framework: Initialize (KUBECONFIG, region)
    Runner->>Framework: Register & filter AWS CCM specs
    Runner->>Framework: Execute suite

    Note over Framework: NLB security-group test flow
    Framework->>Cloud: Check AWSServiceLBNetworkSecurityGroup FeatureGate
    Framework->>Cloud: Verify NLBSecurityGroupMode in cloud-config
    Framework->>K8s: Create Service(type=NLB)
    K8s-->>Framework: Service provisioned (LB DNS)
    Framework->>AWS: DescribeLoadBalancers(by DNS)
    AWS-->>Framework: LoadBalancer metadata (SG IDs)
    Framework->>AWS: DescribeSecurityGroups(SG IDs)
    AWS-->>Framework: Security group rules
    Framework->>Framework: Validate SG rules vs expected ports
    Framework->>K8s: Delete Service
    Framework->>AWS: Poll for LoadBalancer deletion
    AWS-->>Framework: Confirm LB removed
    Framework-->>Runner: Report test result
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Stable And Deterministic Test Names ❌ Error The Ginkgo Describe block uses dynamic fmt.Sprintf with variables for the test title, making test names non-deterministic across runs. Replace the dynamic title with a static literal string in the Describe invocation to ensure consistent, deterministic test names.
Test Structure And Quality ⚠️ Warning Test code violates Ginkgo best practices with missing DeferCleanup, unprotected nil dereferences, incorrect assertion logic using ConsistOf for exact matching, and bash-specific commands in /bin/sh recipe. Implement DeferCleanup for cleanup registration, add nil guards before pointer dereferences, replace ConsistOf with individual port existence checks, use cd instead of pushd/popd in Makefile, and improve error handling in cleanup function.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title describes moving a binary project into e2e/ote/ccm-aws, which aligns with the changeset that adds AWS CCM E2E test infrastructure, build configurations, and documentation.
Docstring Coverage ✅ Passed Docstring coverage is 93.33% which is sufficient. The required threshold is 80.00%.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
📝 Coding Plan
  • Generate coding plan for human review comments

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

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign theobarberbany 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

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 11, 2026

@mtulio: This pull request references SPLAT-2672 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 task to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features

  • Added AWS cloud controller manager tests extension for OpenShift with end-to-end tests validating Network Load Balancer security group management and integration with feature gates.

  • Chores

  • Updated build infrastructure including Dockerfile and Makefile to support the new tests extension.

  • Documentation

  • Added comprehensive README for the tests extension documenting prerequisites, build instructions, and test usage.

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.

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws openshift/origin/#30864

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@mtulio, testwith: Error processing request. ERROR:

could not determine job runs: invalid format for additional PR: openshift/origin/#30864

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws openshift/origin#30864

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@mtulio, testwith: could not generate prow job. ERROR:

BUG: test 'e2e-aws' not found in injected config

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/test ?

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/pull-ci-openshift-cloud-provider-aws-main-e2e-aws-ovn openshift/origin#30864

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@mtulio, testwith: could not generate prow job. ERROR:

BUG: test 'pull-ci-openshift-cloud-provider-aws-main-e2e-aws-ovn' not found in injected config

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: 6

🧹 Nitpick comments (5)
Makefile (2)

40-40: Consider declaring build as .PHONY.

The static analysis tool flagged that the build target should be declared as PHONY since it doesn't produce a file named "build". This ensures the target always runs regardless of file system state.

♻️ Proposed fix
+.PHONY: build
 build: operator config-sync-controllers azure-config-credentials-injector cloud-controller-manager-aws-tests-ext
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` at line 40, The Makefile's build target ("build: operator
config-sync-controllers azure-config-credentials-injector
cloud-controller-manager-aws-tests-ext") should be declared phony so it always
runs; add a .PHONY declaration that includes build (e.g., add ".PHONY: build"
alongside any other phony targets) so the make tool doesn't treat "build" as a
real file and will always execute the recipe.

51-56: Missing popd after pushd in shell command.

The pushd command changes the directory, but there's no corresponding popd to restore the original directory. While Make targets typically run in subshells (so the effect is limited), it's good practice to pair pushd with popd for clarity and to avoid issues if the command is expanded later.

♻️ Proposed fix
 cloud-controller-manager-aws-tests-ext:
 	pushd cmd/cloud-controller-manager-aws-tests-ext && \
 	 GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
 		-trimpath \
 		-ldflags="$(LDFLAGS)" \
-		-o=../../bin/cloud-controller-manager-aws-tests-ext .
-
+		-o=../../bin/cloud-controller-manager-aws-tests-ext . && \
+	popd
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 51 - 56, The target
cloud-controller-manager-aws-tests-ext uses pushd to change directories but
never restores the original directory; update the shell recipe so pushd
cmd/cloud-controller-manager-aws-tests-ext is paired with a corresponding popd
after the go build step (e.g., ensure the sequence ends with popd or chain
commands so popd always runs even on failure) to restore the working directory.
cmd/cloud-controller-manager-aws-tests-ext/main.go (2)

173-177: Typo in comment.

"leding" should be "leading".

📝 Proposed fix
 	// After reading all flags, this will configure the test context, and need to be
 	// called once by framework to avoid re-configuring the test context, and leding
-	// to issues in Ginkgo phases (PhaseBuildTopLevel, PhaseBuildTree, PhaseRun),
+	// leading to issues in Ginkgo phases (PhaseBuildTopLevel, PhaseBuildTree, PhaseRun),
 	// such as:'cannot clone suite after tree has been built'
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go` around lines 173 - 177,
Fix the typo in the comment above the
framework.AfterReadingAllFlags(testContext) call: change "leding" to "leading"
so the comment reads "...and leading to issues in Ginkgo phases
(PhaseBuildTopLevel, PhaseBuildTree, PhaseRun), such as:'cannot clone suite
after tree has been built'".

105-124: Getter function has unexpected side effects.

getRegionFromEnv sets AWS_REGION as a side effect when reading from LEASED_RESOURCE or AWS_DEFAULT_REGION. This violates the principle of least surprise for a "get" function. Consider renaming to getAndSetRegionFromEnv or extracting the side effect into a separate function.

♻️ Proposed refactor
-// getRegionFromEnv gets the region from the environment variables.
-func getRegionFromEnv() string {
+// getOrSetRegionFromEnv gets the region from environment variables and ensures
+// AWS_REGION is set for downstream AWS SDK usage.
+func getOrSetRegionFromEnv() string {
 	region := os.Getenv("LEASED_RESOURCE")
 	if len(region) > 0 {
 		log.Debugf("Using region from LEASED_RESOURCE: %s", region)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go` around lines 105 - 124,
The function getRegionFromEnv currently mutates environment variables (calls
os.Setenv for AWS_REGION) when reading LEASED_RESOURCE or AWS_DEFAULT_REGION;
either remove these side effects so the function only returns the resolved
region, or split into two functions: getRegionFromEnv (pure getter that reads
LEASED_RESOURCE, AWS_REGION, AWS_DEFAULT_REGION and returns the region) and
setRegionEnv(region string) which performs os.Setenv("AWS_REGION", region) when
desired; if you prefer keeping behavior, rename getRegionFromEnv to
getAndSetRegionFromEnv to make the side effect explicit and update all call
sites accordingly.
cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go (1)

187-196: Use AWS SDK error types instead of string matching.

The ec2IsNotFoundError function relies on string matching against error messages, which is fragile. AWS SDK v2 provides typed error handling via smithy errors. Additionally, InvalidGroup.Malformed indicates an invalid ID format, not a non-existent group—it should likely cause test failure rather than being treated as "not found."

♻️ Proposed fix using AWS SDK error types
+import (
+	"errors"
+	"github.com/aws/smithy-go"
+)
+
 // ec2IsNotFoundError checks if an error is an EC2 "not found" error.
 func ec2IsNotFoundError(err error) bool {
 	if err == nil {
 		return false
 	}
-	// Check for common EC2 not found error messages
-	errMsg := err.Error()
-	return strings.Contains(errMsg, "InvalidGroup.NotFound") ||
-		strings.Contains(errMsg, "InvalidGroupId.NotFound") ||
-		strings.Contains(errMsg, "InvalidGroup.Malformed")
+	var apiErr smithy.APIError
+	if errors.As(err, &apiErr) {
+		switch apiErr.ErrorCode() {
+		case "InvalidGroup.NotFound", "InvalidGroupId.NotFound":
+			return true
+		}
+	}
+	return false
 }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go` around lines 187 -
196, Replace fragile string matching in ec2IsNotFoundError with typed AWS SDK
error handling: use errors.As to check if err implements
github.com/aws/smithy-go/middleware/APIError (smithy.APIError) or
smithy.APIError interface and then switch on apiErr.ErrorCode() to return true
only for "InvalidGroup.NotFound" and "InvalidGroupId.NotFound"; explicitly do
NOT treat "InvalidGroup.Malformed" as not-found (return false) so malformed IDs
cause test failures; update ec2IsNotFoundError to use errors.As and ErrorCode()
comparisons instead of strings.Contains.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Around line 296-304: The call to framework.ExpectNoError inside the Eventually
callback prevents retries on transient errors; update the callback so
getAWSSecurityGroupRules(ctx, ec2Client, foundLB.SecurityGroups) returns its
error instead of calling framework.ExpectNoError. Specifically, replace the
ExpectNoError call with logic that checks err and returns nil, err (or
fmt.Errorf-wrapped err) so Eventually can retry; keep the subsequent length
check using originalSGRules and currentSGRules and return the existing
fmt.Errorf when counts haven't changed.
- Around line 292-294: The log message in the load balancer check (inside the
block that inspects foundLB and foundLB.SecurityGroups) is misleading because it
uses "expected=%d" while printing the actual count len(foundLB.SecurityGroups);
update the framework.Logf call to clearly state actual vs expected (for example
"Load balancer has no security groups attached: actual=%d expected=1" or simply
"Load balancer has no security groups attached: actual=%d"), using
len(foundLB.SecurityGroups) for the actual value, and leave the error return
(fmt.Errorf("load balancer has no security groups attached")) unchanged.

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod`:
- Line 132: The go.mod currently pulls k8s.io/cloud-provider v0.34.0 indirectly
which conflicts with other Kubernetes modules pinned at v0.35.0; update the
module replacement by adding a replace directive for k8s.io/cloud-provider to
v0.35.0 (i.e., add "replace k8s.io/cloud-provider => k8s.io/cloud-provider
v0.35.0" in go.mod) so the dependency graph resolves to the same Kubernetes
version, or alternatively add a brief comment in go.mod explaining why v0.34.0
must remain if there is a compatibility reason.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go`:
- Around line 191-193: The condition currently uses
len(os.Getenv("TEST_JUNIT_DIR")) >= 0 which is always true; change the check to
only set testContext.ReportDir when the environment variable is non-empty (e.g.,
testDir := os.Getenv("TEST_JUNIT_DIR"); if testDir != "" { testContext.ReportDir
= testDir }) so that testContext.ReportDir is not overwritten with an empty
string; update references to os.Getenv("TEST_JUNIT_DIR") and
testContext.ReportDir accordingly.

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md`:
- Around line 46-50: Update the README to use the correct make target and output
path: replace the incorrect make invocation that references
openshift-hack/Makefile with the root Makefile target "make
cloud-controller-manager-aws-tests-ext", and update the described binary
location from "./aws-cloud-controller-manager-tests-ext" to
"./bin/cloud-controller-manager-aws-tests-ext" so the command and output path
match the actual "cloud-controller-manager-aws-tests-ext" build target.
- Line 39: Update the README entry that currently says "Go 1.24+" to match the
module's declared Go version in go.mod (go 1.25.0); edit the README text so the
prerequisite reflects "Go 1.25.0" or "Go 1.25+" to align with the go directive
in go.mod and avoid version mismatch.

---

Nitpick comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go`:
- Around line 187-196: Replace fragile string matching in ec2IsNotFoundError
with typed AWS SDK error handling: use errors.As to check if err implements
github.com/aws/smithy-go/middleware/APIError (smithy.APIError) or
smithy.APIError interface and then switch on apiErr.ErrorCode() to return true
only for "InvalidGroup.NotFound" and "InvalidGroupId.NotFound"; explicitly do
NOT treat "InvalidGroup.Malformed" as not-found (return false) so malformed IDs
cause test failures; update ec2IsNotFoundError to use errors.As and ErrorCode()
comparisons instead of strings.Contains.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go`:
- Around line 173-177: Fix the typo in the comment above the
framework.AfterReadingAllFlags(testContext) call: change "leding" to "leading"
so the comment reads "...and leading to issues in Ginkgo phases
(PhaseBuildTopLevel, PhaseBuildTree, PhaseRun), such as:'cannot clone suite
after tree has been built'".
- Around line 105-124: The function getRegionFromEnv currently mutates
environment variables (calls os.Setenv for AWS_REGION) when reading
LEASED_RESOURCE or AWS_DEFAULT_REGION; either remove these side effects so the
function only returns the resolved region, or split into two functions:
getRegionFromEnv (pure getter that reads LEASED_RESOURCE, AWS_REGION,
AWS_DEFAULT_REGION and returns the region) and setRegionEnv(region string) which
performs os.Setenv("AWS_REGION", region) when desired; if you prefer keeping
behavior, rename getRegionFromEnv to getAndSetRegionFromEnv to make the side
effect explicit and update all call sites accordingly.

In `@Makefile`:
- Line 40: The Makefile's build target ("build: operator config-sync-controllers
azure-config-credentials-injector cloud-controller-manager-aws-tests-ext")
should be declared phony so it always runs; add a .PHONY declaration that
includes build (e.g., add ".PHONY: build" alongside any other phony targets) so
the make tool doesn't treat "build" as a real file and will always execute the
recipe.
- Around line 51-56: The target cloud-controller-manager-aws-tests-ext uses
pushd to change directories but never restores the original directory; update
the shell recipe so pushd cmd/cloud-controller-manager-aws-tests-ext is paired
with a corresponding popd after the go build step (e.g., ensure the sequence
ends with popd or chain commands so popd always runs even on failure) to restore
the working directory.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 202486ca-22bf-47b5-9126-7a3de9893062

📥 Commits

Reviewing files that changed from the base of the PR and between b108246 and 8a32d67.

⛔ Files ignored due to path filters (292)
  • cmd/cloud-controller-manager-aws-tests-ext/go.sum is excluded by !**/*.sum
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/.bazelversion is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/.gitattributes is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/.gitignore is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/BUILD.bazel is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/CODE_OF_CONDUCT.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/CONTRIBUTING.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/GOVERNANCE.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/LICENSE is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/MAINTAINERS.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/MODULE.bazel is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/README.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/WORKSPACE is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/WORKSPACE.bzlmod is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/checked.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/cloudbuild.yaml is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/eval.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/explain.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/regen_go_proto.sh is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/regen_go_proto_canonical_protos.sh is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/syntax.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/cel.dev/expr/value.pb.go is excluded by !**/*.pb.go, !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/.gitignore is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/.golangci.yml is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/Makefile is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/README.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/SECURITY.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/collection.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/constraints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/Masterminds/semver/v3/version.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/.gitignore is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/LICENSE is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/README.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/antlrdoc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_config_set.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_deserialization_options.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_deserializer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_simulator.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_state.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/atn_type.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/char_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/common_token_factory.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/common_token_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/comparators.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/configuration.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/dfa.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/dfa_serializer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/dfa_state.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/diagnostic_error_listener.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/error_listener.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/error_strategy.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/errors.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/file_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/input_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/int_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/interval_set.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/jcollect.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/lexer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/lexer_action.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/lexer_action_executor.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/lexer_atn_simulator.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/ll1_analyzer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/nostatistics.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/parser.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/parser_atn_simulator.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/parser_rule_context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/prediction_context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/prediction_context_cache.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/prediction_mode.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/recognizer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/rule_context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/semantic_context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/statistics.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/stats_data.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/token.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/token_source.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/token_stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/tokenstream_rewriter.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/trace_listener.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/transition.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/tree.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/trees.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/antlr4-go/antlr/v4/utils.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/NOTICE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/accountid_endpoint_mode.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/checksum.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/credential_cache.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/credentials.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/auto.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/configuration.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/defaults.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/defaults/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/defaultsmode.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/errors.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/from_ptr.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/logging.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/logging_generate.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/osname_go115.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/recursion_detection.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/request_id_retriever.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/middleware/user_agent.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/ec2query/error_utils.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/array.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/encoder.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/map.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/object.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/query/value.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/restjson/decoder_util.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/protocol/xml/error_utils.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/none.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_bucket.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/ratelimit/token_rate_limit.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/request.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_ratelimit.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/adaptive_token_bucket.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/attempt_metrics.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/errors.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/jitter_backoff.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retry.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/retryable_error.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/standard.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/throttle_error.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retry/timeout_error.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/retryer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/runtime.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/cache.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/const.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/header_rules.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/headers.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/hmac.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/host.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/scope.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/time.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/internal/v4/util.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/presign_middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/stream.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/signer/v4/v4.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/to_ptr.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/client.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/content_type.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/response_error_middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/transport/http/timeout_read_closer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/types.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/aws/version.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/defaultsmode.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/env_config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/generate.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/load_options.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/local.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/resolve.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_bearer_token.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/resolve_credentials.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/config/shared_config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ec2rolecreds/provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/auth.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/client.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/internal/client/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/endpointcreds/provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/processcreds/provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_cached_token.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_credentials_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/ssocreds/sso_token_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/static_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/assume_role_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/credentials/stscreds/web_identity_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_client.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetDynamicData.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetIAMInfo.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetInstanceIdentityDocument.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetMetadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetRegion.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetToken.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/api_op_GetUserData.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/auth.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/internal/config/resolvers.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/request_middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/feature/ec2/imds/token_provider.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/auth.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/scheme.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_adapter.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/bearer_token_signer_adapter.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/credentials_adapter.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/smithy.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/auth/smithy/v4signer_adapter.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/configsources/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/context/context.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/arn.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/doc.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/generate.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/host.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partition.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/awsrulesfn/partitions.json is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/endpoints.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/endpoints/v2/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/errors.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/go_module_metadata.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/ini.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/parse.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/sections.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/strings.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/token.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/tokenize.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/ini/value.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/middleware/middleware.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/rand/rand.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/interfaces.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sdk/time.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sdkio/byte.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/shareddefaults/shared_config.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/strings/strings.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/LICENSE is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/docs.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/sync/singleflight/singleflight.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/internal/timeconv/duration.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/CHANGELOG.md is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/LICENSE.txt is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_client.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptAddressTransfer.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptCapacityReservationBillingOwnership.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptReservedInstancesExchangeQuote.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptTransitGatewayMulticastDomainAssociations.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptTransitGatewayPeeringAttachment.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptTransitGatewayVpcAttachment.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptVpcEndpointConnections.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AcceptVpcPeeringConnection.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AdvertiseByoipCidr.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AllocateAddress.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AllocateHosts.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AllocateIpamPoolCidr.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_ApplySecurityGroupsToClientVpnTargetNetwork.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssignIpv6Addresses.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssignPrivateIpAddresses.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssignPrivateNatGatewayAddress.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateAddress.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateCapacityReservationBillingOwner.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateClientVpnTargetNetwork.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateDhcpOptions.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateEnclaveCertificateIamRole.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateIamInstanceProfile.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateInstanceEventWindow.go is excluded by !**/vendor/**
  • cmd/cloud-controller-manager-aws-tests-ext/vendor/github.com/aws/aws-sdk-go-v2/service/ec2/api_op_AssociateIpamByoasn.go is excluded by !**/vendor/**
📒 Files selected for processing (8)
  • .dockerignore
  • Dockerfile
  • Makefile
  • cmd/cloud-controller-manager-aws-tests-ext/README.md
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go
  • cmd/cloud-controller-manager-aws-tests-ext/go.mod
  • cmd/cloud-controller-manager-aws-tests-ext/main.go

Comment on lines +296 to +304

currentSGRules, err := getAWSSecurityGroupRules(ctx, ec2Client, foundLB.SecurityGroups)
framework.ExpectNoError(err, "failed to get security group rules to calculate the diff")

if len(originalSGRules) >= len(currentSGRules) {
framework.Logf("Security group rules count did not changed: original=%d current=%d",
len(originalSGRules), len(currentSGRules))
return nil, fmt.Errorf("security group rules count did not changed")
}
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

Avoid framework.ExpectNoError inside Eventually callback.

Using framework.ExpectNoError inside the Eventually callback will cause an immediate Ginkgo assertion failure on transient errors, preventing Eventually from retrying. Return the error instead to allow proper retry behavior.

🐛 Proposed fix
 			currentSGRules, err := getAWSSecurityGroupRules(ctx, ec2Client, foundLB.SecurityGroups)
-			framework.ExpectNoError(err, "failed to get security group rules to calculate the diff")
+			if err != nil {
+				framework.Logf("failed to get security group rules: %v", err)
+				return nil, err
+			}

 			if len(originalSGRules) >= len(currentSGRules) {
 				framework.Logf("Security group rules count did not changed: original=%d current=%d",
 					len(originalSGRules), len(currentSGRules))
-				return nil, fmt.Errorf("security group rules count did not changed")
+				return nil, fmt.Errorf("security group rules count did not change")
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
296 - 304, The call to framework.ExpectNoError inside the Eventually callback
prevents retries on transient errors; update the callback so
getAWSSecurityGroupRules(ctx, ec2Client, foundLB.SecurityGroups) returns its
error instead of calling framework.ExpectNoError. Specifically, replace the
ExpectNoError call with logic that checks err and returns nil, err (or
fmt.Errorf-wrapped err) so Eventually can retry; keep the subsequent length
check using originalSGRules and currentSGRules and return the existing
fmt.Errorf when counts haven't changed.

gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.0.0 // indirect
k8s.io/apiserver v0.35.0 // indirect
k8s.io/cloud-provider v0.34.0 // indirect
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check if cloud-provider v0.34.0 is intentional due to transitive dependencies
cd cmd/cloud-controller-manager-aws-tests-ext
go mod graph | grep cloud-provider | head -20

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 1533


🏁 Script executed:

cat cmd/cloud-controller-manager-aws-tests-ext/go.mod | grep -E 'k8s\.io' | head -30

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 1577


🏁 Script executed:

# Check if there are any comments or context around this dependency
sed -n '125,140p' cmd/cloud-controller-manager-aws-tests-ext/go.mod

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 817


Add a replace directive for k8s.io/cloud-provider to align with other Kubernetes module versions.

The indirect dependency k8s.io/cloud-provider v0.34.0 is mismatched with other Kubernetes modules (all at v0.35.0 via direct dependencies and replace directives). This causes the build to resolve multiple versions of the same module (e.g., k8s.io/api v0.35.0 and k8s.io/api v0.34.0 via transitive dependencies), which can lead to API incompatibilities. Add a replace directive:

k8s.io/cloud-provider => k8s.io/cloud-provider v0.35.0

Or document why v0.34.0 is intentional if there is a compatibility reason for the version mismatch.

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

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod` at line 132, The go.mod
currently pulls k8s.io/cloud-provider v0.34.0 indirectly which conflicts with
other Kubernetes modules pinned at v0.35.0; update the module replacement by
adding a replace directive for k8s.io/cloud-provider to v0.35.0 (i.e., add
"replace k8s.io/cloud-provider => k8s.io/cloud-provider v0.35.0" in go.mod) so
the dependency graph resolves to the same Kubernetes version, or alternatively
add a brief comment in go.mod explaining why v0.34.0 must remain if there is a
compatibility reason.

Comment on lines +191 to +193
if len(os.Getenv("TEST_JUNIT_DIR")) >= 0 {
testContext.ReportDir = os.Getenv("TEST_JUNIT_DIR")
}
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

Condition is always true - likely a bug.

The condition len(os.Getenv("TEST_JUNIT_DIR")) >= 0 is always true because string length is never negative. This means testContext.ReportDir will always be set, even when TEST_JUNIT_DIR is empty (resulting in an empty ReportDir).

🐛 Proposed fix
 	// Output the logs on failure
-	if len(os.Getenv("TEST_JUNIT_DIR")) >= 0 {
+	if len(os.Getenv("TEST_JUNIT_DIR")) > 0 {
 		testContext.ReportDir = os.Getenv("TEST_JUNIT_DIR")
 	}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if len(os.Getenv("TEST_JUNIT_DIR")) >= 0 {
testContext.ReportDir = os.Getenv("TEST_JUNIT_DIR")
}
if len(os.Getenv("TEST_JUNIT_DIR")) > 0 {
testContext.ReportDir = os.Getenv("TEST_JUNIT_DIR")
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go` around lines 191 - 193,
The condition currently uses len(os.Getenv("TEST_JUNIT_DIR")) >= 0 which is
always true; change the check to only set testContext.ReportDir when the
environment variable is non-empty (e.g., testDir := os.Getenv("TEST_JUNIT_DIR");
if testDir != "" { testContext.ReportDir = testDir }) so that
testContext.ReportDir is not overwritten with an empty string; update references
to os.Getenv("TEST_JUNIT_DIR") and testContext.ReportDir accordingly.


## Prerequisites

- Go 1.24+
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Go version mismatch with go.mod.

The README states "Go 1.24+" but go.mod specifies go 1.25.0. Update the prerequisite to match the actual requirement.

📝 Proposed fix
-- Go 1.24+
+- Go 1.25+
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- Go 1.24+
- Go 1.25+
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md` at line 39, Update the
README entry that currently says "Go 1.24+" to match the module's declared Go
version in go.mod (go 1.25.0); edit the README text so the prerequisite reflects
"Go 1.25.0" or "Go 1.25+" to align with the go directive in go.mod and avoid
version mismatch.

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cloud-provider-aws/main/e2e-aws-ovn openshift/origin#30864

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@mtulio, testwith: could not generate prow job. ERROR:

create refs for PR: path alias: resolve config openshift/cluster-cloud-controller-manager-operator@: got unexpected http 400 status code from configresolver: branch query missing or incorrect

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/test e2e-aws-ovn

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

Fixed wrong statement in .dockerignore

/test e2e-aws-ovn

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 11, 2026

@mtulio: This pull request references SPLAT-2672 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 task to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Summary by CodeRabbit

  • New Features

  • Added an AWS tests extension with end-to-end suites validating Network Load Balancer security group behavior and feature-gate integration.

  • Documentation

  • Added a comprehensive README documenting prerequisites, build and run instructions, and test usage.

  • Chores

  • Updated build and container packaging to include the new test binary and improve image artifacts; added ignore rules to reduce build context size.

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: 1

♻️ Duplicate comments (1)
cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go (1)

300-303: ⚠️ Potential issue | 🟡 Minor

Grammar issue in log message and error string.

"did not changed" should be "did not change".

📝 Proposed fix
 			if len(originalSGRules) >= len(currentSGRules) {
-				framework.Logf("Security group rules count did not changed: original=%d current=%d",
+				framework.Logf("Security group rules count did not change: original=%d current=%d",
 					len(originalSGRules), len(currentSGRules))
-				return nil, fmt.Errorf("security group rules count did not changed")
+				return nil, fmt.Errorf("security group rules count did not change")
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
300 - 303, Fix the grammar in the security group rules message and error: update
the framework.Logf call and the returned error string that currently say "did
not changed" to "did not change" (the checks around originalSGRules and
currentSGRules where the log and fmt.Errorf are used).
🧹 Nitpick comments (5)
Dockerfile (1)

8-12: Clarify why only the test extension binary is gzipped.

The test extension binary is gzipped while other binaries (cluster-controller-manager-operator, config-sync-controllers, azure-config-credentials-injector) are copied directly. This inconsistency may be intentional (e.g., to reduce image size for a large test binary that's not always needed), but it would be helpful to add a comment explaining the rationale.

Also note that consumers will need to gunzip the binary before use, which should be documented in the README.

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

In `@Dockerfile` around lines 8 - 12, Add a brief comment in the Dockerfile next
to the COPY that places cloud-controller-manager-aws-tests-ext.gz explaining why
only the test extension binary is gzipped (e.g., large test-only binary kept
compressed to reduce image size and because it's optional), and update the
README to document that consumers must gunzip
/usr/bin/cloud-controller-manager-aws-tests-ext.gz before executing; reference
the COPY entry for cloud-controller-manager-aws-tests-ext.gz and the other
copied binaries (cluster-controller-manager-operator, config-sync-controllers,
azure-config-credentials-injector) so maintainers can see the intentional
difference.
cmd/cloud-controller-manager-aws-tests-ext/main.go (1)

104-124: Side effect of setting AWS_REGION should be documented.

The getRegionFromEnv function sets AWS_REGION as a side effect when reading from LEASED_RESOURCE or AWS_DEFAULT_REGION. Consider adding a comment to make this intentional behavior explicit, or renaming to getAndSetRegionFromEnv to make the side effect obvious.

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

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go` around lines 104 - 124,
getRegionFromEnv currently has the side effect of setting the AWS_REGION env var
when it reads from LEASED_RESOURCE or AWS_DEFAULT_REGION; update the code to
make this intentional behavior explicit by either adding a clear comment above
getRegionFromEnv describing that it will set AWS_REGION as a side effect
(mentioning the specific branches that call os.Setenv) or rename the function to
getAndSetRegionFromEnv and update all call sites to the new name so the side
effect is obvious; ensure any documentation or tests referencing
getRegionFromEnv are updated to reflect the documented/renamed behavior.
cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go (1)

565-576: Error handling assumes any API error means load balancer is deleted.

The current logic treats any error from getAWSLoadBalancerFromDNSName as success (LB deleted). However, transient errors (network issues, throttling) would incorrectly mark the poll as complete. Consider distinguishing between "not found" errors and other errors.

🛡️ Proposed improvement
 	err = wait.PollUntilContextTimeout(ctx, 5*time.Second, loadBalancerCreateTimeout, true, func(ctx context.Context) (bool, error) {
 		foundLB, err := getAWSLoadBalancerFromDNSName(ctx, elbClient, lbDNS)
 		if err != nil {
-			// Error finding LB likely means it's deleted - this is success
-			framework.Logf("Load balancer %s not found (likely deleted): %v", lbDNS, err)
-			return true, nil
+			// Only treat "not found" as success; propagate other errors
+			if strings.Contains(err.Error(), "not found") || strings.Contains(err.Error(), "LoadBalancerNotFound") {
+				framework.Logf("Load balancer %s not found (deleted): %v", lbDNS, err)
+				return true, nil
+			}
+			framework.Logf("Error querying load balancer %s: %v", lbDNS, err)
+			return false, nil // Retry on transient errors
 		}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
565 - 576, The polling logic treats any error from getAWSLoadBalancerFromDNSName
as a successful deletion; change it to distinguish "not found" from other errors
by inspecting the returned error (e.g., check AWS error codes or use errors.Is
against a sentinel not-found error returned by getAWSLoadBalancerFromDNSName).
In the anonymous func passed to wait.PollUntilContextTimeout (the block using
elbClient, lbDNS, loadBalancerCreateTimeout), only treat the specific not-found
result as success (return true, nil); for transient/other errors log the failure
and return false, nil so the poll retries (or return the error only if it should
abort permanently). If needed, update getAWSLoadBalancerFromDNSName to return a
clear not-found sentinel error to make this check reliable.
cmd/cloud-controller-manager-aws-tests-ext/go.mod (1)

138-138: k8s.io/kubectl version is misaligned with other k8s.io modules.

The indirect dependency k8s.io/kubectl v0.33.0 is out of sync with most other Kubernetes modules pinned at v0.35.0. Both v0.33.0 and v0.35.0 are stable releases and alignment is possible. Consider adding a replace directive to bring it in line with the rest.

Note: k8s.io/cloud-provider v0.34.0 is similarly misaligned.

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

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod` at line 138, The go.mod
lists an indirect dependency k8s.io/kubectl at v0.33.0 which is out of sync with
the project’s other Kubernetes modules (mostly v0.35.0); update the module
alignment by adding a replace directive that forces k8s.io/kubectl =>
k8s.io/kubectl v0.35.0 (and likewise add/adjust a replace for
k8s.io/cloud-provider to v0.35.0 if present) so all k8s.io modules use the same
v0.35.0 version; locate the k8s.io/kubectl entry in go.mod and add the replace
directives accordingly.
Makefile (1)

51-56: Consider using cd with subshell instead of pushd without popd.

The pushd command changes directory but there's no corresponding popd. While this works in this specific case, using a subshell with cd is more idiomatic in Makefiles and clearer about intent.

Additionally, LDFLAGS is undefined in the Makefile. Unlike standard Go environment variables (GOOS, GOARCH, GOPROXY), LDFLAGS must be explicitly defined. Currently, -ldflags="$(LDFLAGS)" expands to -ldflags="", which is harmless but indicates incomplete build configuration. Consider defining LDFLAGS explicitly or using hardcoded flags like -ldflags="-s -w" if appropriate for this binary.

♻️ Proposed improvement
 cloud-controller-manager-aws-tests-ext:
-	pushd cmd/cloud-controller-manager-aws-tests-ext && \
-	 GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
+	(cd cmd/cloud-controller-manager-aws-tests-ext && \
+	GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
 		-trimpath \
-		-ldflags="$(LDFLAGS)" \
+		-ldflags="-s -w" \
 		-o=../../bin/cloud-controller-manager-aws-tests-ext .)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 51 - 56, The cloud-controller-manager-aws-tests-ext
Make target uses pushd without popd and passes an undefined LDFLAGS; change the
recipe to run the build in a subshell (e.g., use (cd
cmd/cloud-controller-manager-aws-tests-ext && GO111MODULE=on CGO_ENABLED=0
GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build ... -o ... .)) instead
of pushd, and add a default LDFLAGS assignment at top of the Makefile (e.g.,
define LDFLAGS using LDFLAGS ?= -s -w or an explicit value) so the
-ldflags="$(LDFLAGS)" expansion is intentional; update the
cloud-controller-manager-aws-tests-ext recipe to reference the LDFLAGS variable
as before.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Line 80: Fix the typo in the test description string passed to It — add the
missing closing single-quote so the message reads "should have
NLBSecurityGroupMode with 'Managed' value in cloud-config"; locate the It(...)
call where the description currently is "should have NLBSecurityGroupMode with
'Managed value in cloud-config" and update that string accordingly.

---

Duplicate comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Around line 300-303: Fix the grammar in the security group rules message and
error: update the framework.Logf call and the returned error string that
currently say "did not changed" to "did not change" (the checks around
originalSGRules and currentSGRules where the log and fmt.Errorf are used).

---

Nitpick comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Around line 565-576: The polling logic treats any error from
getAWSLoadBalancerFromDNSName as a successful deletion; change it to distinguish
"not found" from other errors by inspecting the returned error (e.g., check AWS
error codes or use errors.Is against a sentinel not-found error returned by
getAWSLoadBalancerFromDNSName). In the anonymous func passed to
wait.PollUntilContextTimeout (the block using elbClient, lbDNS,
loadBalancerCreateTimeout), only treat the specific not-found result as success
(return true, nil); for transient/other errors log the failure and return false,
nil so the poll retries (or return the error only if it should abort
permanently). If needed, update getAWSLoadBalancerFromDNSName to return a clear
not-found sentinel error to make this check reliable.

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod`:
- Line 138: The go.mod lists an indirect dependency k8s.io/kubectl at v0.33.0
which is out of sync with the project’s other Kubernetes modules (mostly
v0.35.0); update the module alignment by adding a replace directive that forces
k8s.io/kubectl => k8s.io/kubectl v0.35.0 (and likewise add/adjust a replace for
k8s.io/cloud-provider to v0.35.0 if present) so all k8s.io modules use the same
v0.35.0 version; locate the k8s.io/kubectl entry in go.mod and add the replace
directives accordingly.

In `@cmd/cloud-controller-manager-aws-tests-ext/main.go`:
- Around line 104-124: getRegionFromEnv currently has the side effect of setting
the AWS_REGION env var when it reads from LEASED_RESOURCE or AWS_DEFAULT_REGION;
update the code to make this intentional behavior explicit by either adding a
clear comment above getRegionFromEnv describing that it will set AWS_REGION as a
side effect (mentioning the specific branches that call os.Setenv) or rename the
function to getAndSetRegionFromEnv and update all call sites to the new name so
the side effect is obvious; ensure any documentation or tests referencing
getRegionFromEnv are updated to reflect the documented/renamed behavior.

In `@Dockerfile`:
- Around line 8-12: Add a brief comment in the Dockerfile next to the COPY that
places cloud-controller-manager-aws-tests-ext.gz explaining why only the test
extension binary is gzipped (e.g., large test-only binary kept compressed to
reduce image size and because it's optional), and update the README to document
that consumers must gunzip /usr/bin/cloud-controller-manager-aws-tests-ext.gz
before executing; reference the COPY entry for
cloud-controller-manager-aws-tests-ext.gz and the other copied binaries
(cluster-controller-manager-operator, config-sync-controllers,
azure-config-credentials-injector) so maintainers can see the intentional
difference.

In `@Makefile`:
- Around line 51-56: The cloud-controller-manager-aws-tests-ext Make target uses
pushd without popd and passes an undefined LDFLAGS; change the recipe to run the
build in a subshell (e.g., use (cd cmd/cloud-controller-manager-aws-tests-ext &&
GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go
build ... -o ... .)) instead of pushd, and add a default LDFLAGS assignment at
top of the Makefile (e.g., define LDFLAGS using LDFLAGS ?= -s -w or an explicit
value) so the -ldflags="$(LDFLAGS)" expansion is intentional; update the
cloud-controller-manager-aws-tests-ext recipe to reference the LDFLAGS variable
as before.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: 12e50d26-0815-44fc-abda-503961d9f9d7

📥 Commits

Reviewing files that changed from the base of the PR and between 8a32d67 and a6548bd.

⛔ Files ignored due to path filters (1)
  • cmd/cloud-controller-manager-aws-tests-ext/go.sum is excluded by !**/*.sum
📒 Files selected for processing (8)
  • .dockerignore
  • Dockerfile
  • Makefile
  • cmd/cloud-controller-manager-aws-tests-ext/README.md
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go
  • cmd/cloud-controller-manager-aws-tests-ext/go.mod
  • cmd/cloud-controller-manager-aws-tests-ext/main.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
  • .dockerignore

// - Configuration includes: NLBSecurityGroupMode set to 'Managed'
// - The test must fail if the feature gate is enabled and the configuration does not include NLBSecurityGroupMode set to 'Managed'
// - The test must skip if the feature gate is not enabled
It("should have NLBSecurityGroupMode with 'Managed value in cloud-config", func(ctx context.Context) {
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Minor typo in test description.

There's a missing closing quote in the test description: 'Managed value should be 'Managed' value.

📝 Proposed fix
-	It("should have NLBSecurityGroupMode with 'Managed value in cloud-config", func(ctx context.Context) {
+	It("should have NLBSecurityGroupMode with 'Managed' value in cloud-config", func(ctx context.Context) {
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
It("should have NLBSecurityGroupMode with 'Managed value in cloud-config", func(ctx context.Context) {
It("should have NLBSecurityGroupMode with 'Managed' value in cloud-config", func(ctx context.Context) {
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` at line 80,
Fix the typo in the test description string passed to It — add the missing
closing single-quote so the message reads "should have NLBSecurityGroupMode with
'Managed' value in cloud-config"; locate the It(...) call where the description
currently is "should have NLBSecurityGroupMode with 'Managed value in
cloud-config" and update that string accordingly.

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864,openshift/cloud-provider-aws#133

@mtulio
Copy link
Contributor Author

mtulio commented Mar 11, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 11, 2026

@mtulio: This pull request references SPLAT-2672 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 task to target the "4.22.0" version, but no target version was set.

Details

In response to this:

Blocks:

Summary by CodeRabbit

  • New Features

  • Added an AWS tests extension with end-to-end suites validating Network Load Balancer security group behavior and feature-gate integration.

  • Documentation

  • Added a comprehensive README documenting prerequisites, build and run instructions, and test usage.

  • Chores

  • Updated build and container packaging to include the new test binary and improve image artifacts; added ignore rules to reduce build context size.

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.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Mar 11, 2026

@mtulio: all tests passed!

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.

Moving the OTE binary from CCM-AWS to CCCMO project.
@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

I've found two issues in my last attempt:

  • image tag name for new ote binary to extract (origin repo)
  • dockerignore skipping ote dir 🦀

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 12, 2026

@mtulio: This pull request references SPLAT-2672 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:

Blocks:

Summary by CodeRabbit

  • New Features

  • Added an AWS tests extension providing end-to-end suites that validate Network Load Balancer security group behavior and feature‑gate interactions.

  • Documentation

  • Added a comprehensive README with prerequisites, build/run instructions, test usage, and examples.

  • Chores

  • Updated build and container packaging to include the new test binary and reduced Docker build context via ignore rules.

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: 7

♻️ Duplicate comments (4)
cmd/cloud-controller-manager-aws-tests-ext/README.md (2)

39-39: ⚠️ Potential issue | 🟡 Minor

Update the Go prerequisite to match go.mod.

go.mod for this module is set to go 1.25.0, so Go 1.24+ sends readers to the wrong toolchain.

📝 Proposed fix
-- Go 1.24+
+- Go 1.25+
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md` at line 39, The
README's Go prerequisite is outdated; update the Go version requirement text
(the line currently reading "Go 1.24+") to match the module's go.mod (which
specifies go 1.25.0) by changing it to "Go 1.25+" so documentation aligns with
the actual toolchain required.

1-4: ⚠️ Potential issue | 🟡 Minor

The documented binary name and commands still don't match the build output.

The Makefile builds bin/cloud-controller-manager-aws-tests-ext, but the README examples still use aws-cloud-controller-manager-tests-ext and the old make invocation, so the copy-paste path here won't work.

📝 Proposed fix
-# aws-cloud-controller-manager-tests-ext (OTE binary)
+# cloud-controller-manager-aws-tests-ext (OTE binary)
@@
 ```sh
-make -f openshift-hack/Makefile aws-cloud-controller-manager-tests-ext
+make cloud-controller-manager-aws-tests-ext

-The binary will be created at the repository root: ./aws-cloud-controller-manager-tests-ext
+The binary will be created at: ./bin/cloud-controller-manager-aws-tests-ext
@@

-$ ./aws-cloud-controller-manager-tests-ext list --topology=HighAvailability --platform=aws | jq .[].name
+$ ./bin/cloud-controller-manager-aws-tests-ext list --topology=HighAvailability --platform=aws | jq .[].name
@@
```sh
$ export KUBECONFIG=/path/to/kubeconfig
-$ ./aws-cloud-controller-manager-tests-ext run-test "[cloud-provider-aws-e2e-openshift] loadbalancer NLB feature AWSServiceLBNetworkSecurityGroup should have security groups attached to default ingress controller NLB [Suite:openshift/conformance/parallel]"
+$ ./bin/cloud-controller-manager-aws-tests-ext run-test "[cloud-provider-aws-e2e-openshift] loadbalancer NLB feature AWSServiceLBNetworkSecurityGroup should have security groups attached to default ingress controller NLB [Suite:openshift/conformance/parallel]"
</details>


Also applies to: 46-50, 56-68

<details>
<summary>🤖 Prompt for AI Agents</summary>

Verify each finding against the current code and only fix it if needed.

In @cmd/cloud-controller-manager-aws-tests-ext/README.md around lines 1 - 4,
README references the old binary name and make target
(aws-cloud-controller-manager-tests-ext) which don't match the build output;
update all occurrences to the actual build target and path: change the make
invocation to "make cloud-controller-manager-aws-tests-ext", update binary paths
from "./aws-cloud-controller-manager-tests-ext" to
"./bin/cloud-controller-manager-aws-tests-ext", and adjust all example commands
(list, run-test) accordingly so the documented commands match the built artifact
name and location.


</details>

</blockquote></details>
<details>
<summary>cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go (1)</summary><blockquote>

`297-303`: _⚠️ Potential issue_ | _🟠 Major_

**Return SG lookup errors from `Eventually` instead of asserting.**

`framework.ExpectNoError` aborts the spec on the first transient AWS failure, so this poll never retries.
 

<details>
<summary>🐛 Proposed fix</summary>

```diff
 			currentSGRules, err := getAWSSecurityGroupRules(ctx, ec2Client, foundLB.SecurityGroups)
-			framework.ExpectNoError(err, "failed to get security group rules to calculate the diff")
+			if err != nil {
+				framework.Logf("failed to get security group rules: %v", err)
+				return nil, err
+			}
 
 			if len(originalSGRules) >= len(currentSGRules) {
-				framework.Logf("Security group rules count did not changed: original=%d current=%d",
+				framework.Logf("Security group rules count did not change: original=%d current=%d",
 					len(originalSGRules), len(currentSGRules))
-				return nil, fmt.Errorf("security group rules count did not changed")
+				return nil, fmt.Errorf("security group rules count did not change")
 			}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
297 - 303, The call to framework.ExpectNoError inside the Eventually poll
(around getAWSSecurityGroupRules) aborts the test on transient AWS errors;
replace that assertion with returning the error so the poll can retry: in the
block that calls getAWSSecurityGroupRules(ctx, ec2Client,
foundLB.SecurityGroups) handle the err with if err != nil { return nil, err }
instead of framework.ExpectNoError, and keep returning an error when
len(originalSGRules) >= len(currentSGRules) (e.g., return nil, fmt.Errorf(...))
so Eventually receives errors and continues polling; update references to
getAWSSecurityGroupRules, originalSGRules, currentSGRules, and the surrounding
Eventually closure accordingly.
cmd/cloud-controller-manager-aws-tests-ext/go.mod (1)

130-138: ⚠️ Potential issue | 🟠 Major

Resolve the remaining Kubernetes version skew.

k8s.io/cloud-provider is still at v0.34.0 while the rest of this module is pinned/replaced to the v0.35.x line. That skew is where cross-module API/type mismatches usually show up.

🧩 Proposed fix
 replace (
 	github.com/onsi/ginkgo/v2 => github.com/openshift/onsi-ginkgo/v2 v2.6.1-0.20260303184444-1cc650aa0565
 	k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.35.0
+	k8s.io/cloud-provider => k8s.io/cloud-provider v0.35.0
 	// Required for k8s.io/kubernetes v1.35.0
 	k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.35.0
#!/bin/bash
# Inspect Kubernetes module versions declared in this go.mod.
python - <<'PY'
import re
from pathlib import Path

text = Path("cmd/cloud-controller-manager-aws-tests-ext/go.mod").read_text().splitlines()
for line in text:
    m = re.match(r'\s*(k8s\.io/[^\s]+)\s+v([0-9]+\.[0-9]+\.[0-9]+)', line)
    if m:
        print(f"{m.group(1)} {m.group(2)}")
PY
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod` around lines 130 - 138,
k8s.io/cloud-provider is pinned to v0.34.0 while the rest of the Kubernetes
modules target the v0.35.x line; update the module declaration for
k8s.io/cloud-provider to the matching v0.35.0 (or the same v0.35.x version used
elsewhere), then run go get k8s.io/cloud-provider@v0.35.0 (or the exact v0.35.x
version) and go mod tidy to refresh go.sum and ensure no skew; look for the
k8s.io/cloud-provider entry in the go.mod and update it to match the other
k8s.io/* versions.
🧹 Nitpick comments (1)
Makefile (1)

39-40: Declare build phony.

A file or directory named build at the repo root will short-circuit this target. Adding .PHONY: build keeps the build path deterministic.

♻️ Proposed fix
+.PHONY: build
 build: operator config-sync-controllers azure-config-credentials-injector cloud-controller-manager-aws-tests-ext
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 39 - 40, The Makefile's build target can be shadowed
by a file/directory named "build"; add a phony declaration for it by including
".PHONY: build" (or by adding "build" to an existing .PHONY line) so the make
target always runs regardless of filesystem entries; update the Makefile near
the other .PHONY declarations to reference the build target name.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Around line 119-141: After creating the NLB service with createServiceNLB,
immediately register a cleanup action so the service (and its NLB/security
groups) are removed even if the test fails early; use framework.AddCleanupAction
(or the suite's cleanup helper) to call
deleteServiceAndWaitForLoadBalancerDeletion (or at minimum jig.DeleteService)
with the returned jig and service info (svc and/or
svc.Status.LoadBalancer.Ingress[0].Hostname) instead of only deleting at the end
of the test; place this registration right after createServiceNLB returns
(referencing createServiceNLB, svc, jig, and
deleteServiceAndWaitForLoadBalancerDeletion) so resources are always cleaned up
on failure.
- Around line 467-476: The test incorrectly asserts the exact multiset of ports
by using ConsistOf on expectedPorts, which fails when SGs have duplicates or
extra managed rules; update the assertion to check that both required ports (80
and 443) are present rather than matching the exact set: collect ports from
currentSGRules into expectedPorts (already done) and replace the ConsistOf
assertion with a presence check such as
Expect(expectedPorts).To(ContainElements(int32(80), int32(443))) or assert that
a set of ports contains both 80 and 443 so duplicates/extra rules don't break
the test; reference expectedPorts and currentSGRules when locating the change.
- Around line 202-213: The poll callback dereferences lb.State without ensuring
lb is non-nil; update the callback used in wait.PollUntilContextTimeout so it
checks for lb != nil before accessing lb.State (from
getAWSLoadBalancerFromDNSName), e.g. only log lb.State when lb and lb.State are
non-nil and otherwise log that the load balancer is nil/not found or skip the
state access; modify the framework.Logf call at the end of the callback to guard
against nil lb and avoid a panic.
- Around line 292-294: The check that logs the number of security groups
dereferences foundLB even when it's nil; change the logic in the load balancer
check (the if block that uses foundLB and foundLB.SecurityGroups) to avoid
accessing foundLB.SecurityGroups when foundLB == nil — e.g. determine sgCount
conditionally (sgCount := 0; if foundLB != nil { sgCount =
len(foundLB.SecurityGroups) }) or split the nil check before using len, then use
sgCount in framework.Logf and keep the existing error return; this ensures
Eventually can retry without panicking.
- Around line 565-570: The current wait.PollUntilContextTimeout callback treats
any error from getAWSLoadBalancerFromDNSName as a successful deletion; change it
to only consider deletion successful when the call returns a
LoadBalancerNotFoundException (AWS error code for a missing LB) or when foundLB
== nil, and for all other errors return false, err so the poll will retry; in
practice update the error handling in the anonymous function passed to
wait.PollUntilContextTimeout to inspect the AWS SDK error (e.g., via
awserr.Error or error.Code()/ErrorCode/Is depending on the SDK) for the
LoadBalancerNotFoundException value and only then return true, nil, otherwise
return false, err, keeping lbDNS, elbClient and getAWSLoadBalancerFromDNSName as
reference points.

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md`:
- Around line 8-9: Update the README.md directory layout to match the repository
structure: replace references to
tests/aws-cloud-controller-manager-tests-ext/... with
cmd/cloud-controller-manager-aws-tests-ext/... and include the additional files
present in the repo (e.g., go.mod and README.md at the top-level of that
module). Edit the README text that lists the tree (the section around the
example layout and lines 25-34) so it shows
"cmd/cloud-controller-manager-aws-tests-ext/" as the root, includes the
e2e/loadbalancer.go and e2e/helper.go entries, and lists main.go, go.mod, and
README.md to accurately reflect the current code location.

In `@Makefile`:
- Around line 51-56: The Makefile recipe for target
cloud-controller-manager-aws-tests-ext uses the Bash builtin pushd which fails
under /bin/sh in CI; replace the pushd/popd usage with a POSIX-safe change
directory by using cd into cmd/cloud-controller-manager-aws-tests-ext (or wrap
the build in a subshell with (cd cmd/cloud-controller-manager-aws-tests-ext &&
GO111MODULE=... go build ...)) so the build runs under /bin/sh without requiring
Bash.

---

Duplicate comments:
In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go`:
- Around line 297-303: The call to framework.ExpectNoError inside the Eventually
poll (around getAWSSecurityGroupRules) aborts the test on transient AWS errors;
replace that assertion with returning the error so the poll can retry: in the
block that calls getAWSSecurityGroupRules(ctx, ec2Client,
foundLB.SecurityGroups) handle the err with if err != nil { return nil, err }
instead of framework.ExpectNoError, and keep returning an error when
len(originalSGRules) >= len(currentSGRules) (e.g., return nil, fmt.Errorf(...))
so Eventually receives errors and continues polling; update references to
getAWSSecurityGroupRules, originalSGRules, currentSGRules, and the surrounding
Eventually closure accordingly.

In `@cmd/cloud-controller-manager-aws-tests-ext/go.mod`:
- Around line 130-138: k8s.io/cloud-provider is pinned to v0.34.0 while the rest
of the Kubernetes modules target the v0.35.x line; update the module declaration
for k8s.io/cloud-provider to the matching v0.35.0 (or the same v0.35.x version
used elsewhere), then run go get k8s.io/cloud-provider@v0.35.0 (or the exact
v0.35.x version) and go mod tidy to refresh go.sum and ensure no skew; look for
the k8s.io/cloud-provider entry in the go.mod and update it to match the other
k8s.io/* versions.

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md`:
- Line 39: The README's Go prerequisite is outdated; update the Go version
requirement text (the line currently reading "Go 1.24+") to match the module's
go.mod (which specifies go 1.25.0) by changing it to "Go 1.25+" so documentation
aligns with the actual toolchain required.
- Around line 1-4: README references the old binary name and make target
(aws-cloud-controller-manager-tests-ext) which don't match the build output;
update all occurrences to the actual build target and path: change the make
invocation to "make cloud-controller-manager-aws-tests-ext", update binary paths
from "./aws-cloud-controller-manager-tests-ext" to
"./bin/cloud-controller-manager-aws-tests-ext", and adjust all example commands
(list, run-test) accordingly so the documented commands match the built artifact
name and location.

---

Nitpick comments:
In `@Makefile`:
- Around line 39-40: The Makefile's build target can be shadowed by a
file/directory named "build"; add a phony declaration for it by including
".PHONY: build" (or by adding "build" to an existing .PHONY line) so the make
target always runs regardless of filesystem entries; update the Makefile near
the other .PHONY declarations to reference the build target name.

ℹ️ Review info
⚙️ Run configuration

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

Review profile: CHILL

Plan: Pro

Run ID: d93b3012-1a18-463c-b1a0-2caf39ccd0e3

📥 Commits

Reviewing files that changed from the base of the PR and between a6548bd and e87a423.

⛔ Files ignored due to path filters (1)
  • cmd/cloud-controller-manager-aws-tests-ext/go.sum is excluded by !**/*.sum
📒 Files selected for processing (8)
  • .dockerignore
  • Dockerfile
  • Makefile
  • cmd/cloud-controller-manager-aws-tests-ext/README.md
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go
  • cmd/cloud-controller-manager-aws-tests-ext/go.mod
  • cmd/cloud-controller-manager-aws-tests-ext/main.go
🚧 Files skipped from review as they are similar to previous changes (3)
  • cmd/cloud-controller-manager-aws-tests-ext/main.go
  • .dockerignore
  • cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go

Comment on lines +119 to +141
By("creating test service and deployment configuration")
serviceName := "nlb-sg-crt"
svc, jig, err := createServiceNLB(ctx, cs, ns, serviceName, map[int32]int32{80: 8080})
framework.ExpectNoError(err, "failed to create NLB service load balancer")

foundLB, err := getNLBMetaFromName(ctx, cs, ns, serviceName)
framework.ExpectNoError(err, "failed to get NLB metadata")
Expect(foundLB).NotTo(BeNil(), "found load balancer is nil")

By("verifying security groups are attached to the NLB")
Expect(len(foundLB.SecurityGroups)).To(BeNumerically(">", 0),
"load balancer should have security groups attached when NLBSecurityGroupMode = Managed")

framework.Logf("Successfully validated that load balancer has %d security group(s) attached", len(foundLB.SecurityGroups))
for i, sg := range foundLB.SecurityGroups {
framework.Logf(" Security Group %d: %s", i+1, sg)
}

lbDNS := svc.Status.LoadBalancer.Ingress[0].Hostname
framework.Logf("Load balancer DNS: %s", lbDNS)

err = deleteServiceAndWaitForLoadBalancerDeletion(ctx, jig, lbDNS)
framework.ExpectNoError(err, "failed to delete service and wait for load balancer deletion")
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

Register cleanup immediately after provisioning.

These specs only clean up at the tail. Any failure before the final delete leaks the NLB and managed security groups into the AWS account.

🧹 Proposed fix pattern
 		lbDNS := svc.Status.LoadBalancer.Ingress[0].Hostname
+		DeferCleanup(func(ctx context.Context) {
+			err := deleteServiceAndWaitForLoadBalancerDeletion(ctx, jig, lbDNS)
+			framework.ExpectNoError(err, "failed to delete service and wait for load balancer deletion")
+		})
 		framework.Logf("Load balancer DNS: %s", lbDNS)
-
-		err = deleteServiceAndWaitForLoadBalancerDeletion(ctx, jig, lbDNS)
-		framework.ExpectNoError(err, "failed to delete service and wait for load balancer deletion")
 	})

Also applies to: 243-331, 435-480

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

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
119 - 141, After creating the NLB service with createServiceNLB, immediately
register a cleanup action so the service (and its NLB/security groups) are
removed even if the test fails early; use framework.AddCleanupAction (or the
suite's cleanup helper) to call deleteServiceAndWaitForLoadBalancerDeletion (or
at minimum jig.DeleteService) with the returned jig and service info (svc and/or
svc.Status.LoadBalancer.Ingress[0].Hostname) instead of only deleting at the end
of the test; place this registration right after createServiceNLB returns
(referencing createServiceNLB, svc, jig, and
deleteServiceAndWaitForLoadBalancerDeletion) so resources are always cleaned up
on failure.

Comment on lines +202 to +213
err = wait.PollUntilContextTimeout(ctx, 10*time.Second, 3*time.Minute, true, func(pollCtx context.Context) (bool, error) {
lb, err := getAWSLoadBalancerFromDNSName(pollCtx, elbClient, lbDNS)
if err != nil {
framework.Logf("Failed to find load balancer with DNS %s: %v", lbDNS, err)
return false, nil
}
if lb != nil && lb.State != nil && lb.State.Code == elbv2types.LoadBalancerStateEnumActive {
foundLB = lb
return true, nil
}
framework.Logf("Load balancer not yet active, current state: %v", lb.State)
return false, 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 | 🔴 Critical

Guard the nil load balancer before logging its state.

If getAWSLoadBalancerFromDNSName returns nil, nil, Line 212 dereferences lb.State and panics instead of retrying.

🐛 Proposed fix
 			if lb != nil && lb.State != nil && lb.State.Code == elbv2types.LoadBalancerStateEnumActive {
 				foundLB = lb
 				return true, nil
 			}
-			framework.Logf("Load balancer not yet active, current state: %v", lb.State)
+			if lb == nil {
+				framework.Logf("Load balancer %s not returned yet", lbDNS)
+				return false, nil
+			}
+			framework.Logf("Load balancer not yet active, current state: %v", lb.State)
 			return false, nil
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
202 - 213, The poll callback dereferences lb.State without ensuring lb is
non-nil; update the callback used in wait.PollUntilContextTimeout so it checks
for lb != nil before accessing lb.State (from getAWSLoadBalancerFromDNSName),
e.g. only log lb.State when lb and lb.State are non-nil and otherwise log that
the load balancer is nil/not found or skip the state access; modify the
framework.Logf call at the end of the callback to guard against nil lb and avoid
a panic.

Comment on lines +292 to +294
if foundLB == nil || len(foundLB.SecurityGroups) == 0 {
framework.Logf("Load balancer has no security groups attached, expected=%d", len(foundLB.SecurityGroups))
return nil, fmt.Errorf("load balancer has no security groups attached")
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Don't dereference foundLB in the retry path.

When foundLB is nil, Line 293 evaluates len(foundLB.SecurityGroups) and panics, so Eventually never gets a chance to retry.

🐛 Proposed fix
-			if foundLB == nil || len(foundLB.SecurityGroups) == 0 {
-				framework.Logf("Load balancer has no security groups attached, expected=%d", len(foundLB.SecurityGroups))
+			if foundLB == nil {
+				framework.Logf("Load balancer not found yet")
+				return nil, fmt.Errorf("load balancer not found yet")
+			}
+			if len(foundLB.SecurityGroups) == 0 {
+				framework.Logf("Load balancer has no security groups attached")
 				return nil, fmt.Errorf("load balancer has no security groups attached")
 			}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if foundLB == nil || len(foundLB.SecurityGroups) == 0 {
framework.Logf("Load balancer has no security groups attached, expected=%d", len(foundLB.SecurityGroups))
return nil, fmt.Errorf("load balancer has no security groups attached")
if foundLB == nil {
framework.Logf("Load balancer not found yet")
return nil, fmt.Errorf("load balancer not found yet")
}
if len(foundLB.SecurityGroups) == 0 {
framework.Logf("Load balancer has no security groups attached")
return nil, fmt.Errorf("load balancer has no security groups attached")
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
292 - 294, The check that logs the number of security groups dereferences
foundLB even when it's nil; change the logic in the load balancer check (the if
block that uses foundLB and foundLB.SecurityGroups) to avoid accessing
foundLB.SecurityGroups when foundLB == nil — e.g. determine sgCount
conditionally (sgCount := 0; if foundLB != nil { sgCount =
len(foundLB.SecurityGroups) }) or split the nil check before using len, then use
sgCount in framework.Logf and keep the existing error return; this ensures
Eventually can retry without panicking.

Comment on lines +467 to +476
expectedPorts := []int32{}
for _, rule := range currentSGRules {
if rule.ToPort == nil {
continue
}
if *rule.ToPort == 80 || *rule.ToPort == 443 {
expectedPorts = append(expectedPorts, *rule.ToPort)
}
}
Expect(expectedPorts).To(ConsistOf([]int32{80, 443}), "security groups should have rules for both ports 80 and 443")
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

Check for required ports, not an exact SG rule multiset.

Security groups can legitimately contain duplicate or extra managed rules. ConsistOf([]int32{80, 443}) makes this test fail even when both required ports are present.

🐛 Proposed fix
-		expectedPorts := []int32{}
+		requiredPorts := map[int32]bool{80: false, 443: false}
 		for _, rule := range currentSGRules {
 			if rule.ToPort == nil {
 				continue
 			}
-			if *rule.ToPort == 80 || *rule.ToPort == 443 {
-				expectedPorts = append(expectedPorts, *rule.ToPort)
+			if _, ok := requiredPorts[*rule.ToPort]; ok {
+				requiredPorts[*rule.ToPort] = true
 			}
 		}
-		Expect(expectedPorts).To(ConsistOf([]int32{80, 443}), "security groups should have rules for both ports 80 and 443")
+		Expect(requiredPorts[80]).To(BeTrue(), "security groups should have a rule for port 80")
+		Expect(requiredPorts[443]).To(BeTrue(), "security groups should have a rule for port 443")
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
expectedPorts := []int32{}
for _, rule := range currentSGRules {
if rule.ToPort == nil {
continue
}
if *rule.ToPort == 80 || *rule.ToPort == 443 {
expectedPorts = append(expectedPorts, *rule.ToPort)
}
}
Expect(expectedPorts).To(ConsistOf([]int32{80, 443}), "security groups should have rules for both ports 80 and 443")
requiredPorts := map[int32]bool{80: false, 443: false}
for _, rule := range currentSGRules {
if rule.ToPort == nil {
continue
}
if _, ok := requiredPorts[*rule.ToPort]; ok {
requiredPorts[*rule.ToPort] = true
}
}
Expect(requiredPorts[80]).To(BeTrue(), "security groups should have a rule for port 80")
Expect(requiredPorts[443]).To(BeTrue(), "security groups should have a rule for port 443")
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
467 - 476, The test incorrectly asserts the exact multiset of ports by using
ConsistOf on expectedPorts, which fails when SGs have duplicates or extra
managed rules; update the assertion to check that both required ports (80 and
443) are present rather than matching the exact set: collect ports from
currentSGRules into expectedPorts (already done) and replace the ConsistOf
assertion with a presence check such as
Expect(expectedPorts).To(ContainElements(int32(80), int32(443))) or assert that
a set of ports contains both 80 and 443 so duplicates/extra rules don't break
the test; reference expectedPorts and currentSGRules when locating the change.

Comment on lines +565 to +570
err = wait.PollUntilContextTimeout(ctx, 5*time.Second, loadBalancerCreateTimeout, true, func(ctx context.Context) (bool, error) {
foundLB, err := getAWSLoadBalancerFromDNSName(ctx, elbClient, lbDNS)
if err != nil {
// Error finding LB likely means it's deleted - this is success
framework.Logf("Load balancer %s not found (likely deleted): %v", lbDNS, err)
return true, 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
# Inspect how getAWSLoadBalancerFromDNSName distinguishes "not found" from transient ELB errors.
sed -n '1,260p' cmd/cloud-controller-manager-aws-tests-ext/e2e/helper.go
rg -n -C3 'func getAWSLoadBalancerFromDNSName|DescribeLoadBalancers|LoadBalancerNotFound|NotFound' cmd/cloud-controller-manager-aws-tests-ext/e2e

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 10096


🏁 Script executed:

rg -n 'NoLoadBalancersFound|LoadBalancerNotFound|not found.*load.*balancer' cmd/cloud-controller-manager-aws-tests-ext/e2e

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 77


🏁 Script executed:

rg -n 'elbv2.*error|LoadBalancer.*error' cmd/cloud-controller-manager-aws-tests-ext/e2e

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 819


🌐 Web query:

AWS Go SDK v2 ELBv2 DescribeLoadBalancers error handling "not found"

💡 Result:

In AWS SDK for Go v2, elbv2.DescribeLoadBalancers returns a modeled service error when the LB doesn’t exist: *types.LoadBalancerNotFoundException (“The specified load balancer does not exist.”) [2]. The SDK may wrap it (commonly in *smithy.OperationError), so use errors.As to unwrap and match the modeled type (or fall back to smithy.APIError + ErrorCode()). [1]

import (
  "context"
  "errors"

  "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2"
  elbtypes "github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2/types"
  "github.com/aws/smithy-go"
)

out, err := c.DescribeLoadBalancers(ctx, &elasticloadbalancingv2.DescribeLoadBalancersInput{
  LoadBalancerArns: []string{lbArn},
})
_ = out

if err != nil {
  // Preferred: match the modeled "not found" exception
  var nf *elbtypes.LoadBalancerNotFoundException
  if errors.As(err, &nf) {
    // handle "not found"
    return
  }

  // Generic fallback (works for modeled + unmodeled AWS errors)
  var apiErr smithy.APIError
  if errors.As(err, &apiErr) && apiErr.ErrorCode() == "LoadBalancerNotFoundException" {
    // handle "not found"
    return
  }

  // other error
  return
}

Sources: AWS Go v2 error handling guidance [1]; LoadBalancerNotFoundException type docs [2].


🏁 Script executed:

sed -n '560,580p' cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 952


🏁 Script executed:

# Check if there's any existing ELBv2 error type checking in the codebase
rg -n 'LoadBalancerNotFoundException|errors\.As' cmd/cloud-controller-manager-aws-tests-ext/e2e

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 77


Treat load balancer "not found" errors separately from transient AWS errors.

The code currently treats all errors from getAWSLoadBalancerFromDNSName() as successful deletion. This conflates "LB doesn't exist" (legitimate success) with throttling, auth, and transient AWS failures, which can hide leaked load balancers and make the cleanup assertion meaningless.

Instead, retry on transient errors and only consider the load balancer successfully deleted when:

  1. getAWSLoadBalancerFromDNSName() returns LoadBalancerNotFoundException (the LB genuinely doesn't exist)
  2. foundLB == nil (LB lookup succeeded but found no match)

Distinguish between these cases using the AWS SDK error type. For other errors, return false, err to retry the poll.

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

In `@cmd/cloud-controller-manager-aws-tests-ext/e2e/loadbalancer.go` around lines
565 - 570, The current wait.PollUntilContextTimeout callback treats any error
from getAWSLoadBalancerFromDNSName as a successful deletion; change it to only
consider deletion successful when the call returns a
LoadBalancerNotFoundException (AWS error code for a missing LB) or when foundLB
== nil, and for all other errors return false, err so the poll will retry; in
practice update the error handling in the anonymous function passed to
wait.PollUntilContextTimeout to inspect the AWS SDK error (e.g., via
awserr.Error or error.Code()/ErrorCode/Is depending on the SDK) for the
LoadBalancerNotFoundException value and only then return true, nil, otherwise
return false, err, keeping lbDNS, elbClient and getAWSLoadBalancerFromDNSName as
reference points.

Comment on lines +8 to +9
OpenShift-specific (downstream) tests live under `tests/aws-cloud-controller-manager-tests-ext/e2e`
and are added to the list of tests executed by `openshift-tests`.
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

The documented directory layout doesn't match this repo.

This README points readers to tests/aws-cloud-controller-manager-tests-ext/..., but the code added in this PR lives under cmd/cloud-controller-manager-aws-tests-ext/....

📝 Proposed fix
-OpenShift-specific (downstream) tests live under `tests/aws-cloud-controller-manager-tests-ext/e2e`
+OpenShift-specific (downstream) tests in this repository live under `cmd/cloud-controller-manager-aws-tests-ext/e2e`
@@
-```
-tests/aws-cloud-controller-manager-tests-ext/
-├── e2e/
-│   ├── loadbalancer.go    # OpenShift-specific load balancer tests
-│   └── helper.go           # Helper functions (AWS clients, feature gate checks, etc.)
-├── main.go                 # Test binary entrypoint
-└── README.md
-```
+```text
+cmd/cloud-controller-manager-aws-tests-ext/
+├── e2e/
+│   ├── loadbalancer.go     # OpenShift-specific load balancer tests
+│   └── helper.go           # Helper functions (AWS clients, feature gate checks, etc.)
+├── main.go                 # Test binary entrypoint
+├── go.mod
+└── README.md
+```

Also applies to: 25-34

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

In `@cmd/cloud-controller-manager-aws-tests-ext/README.md` around lines 8 - 9,
Update the README.md directory layout to match the repository structure: replace
references to tests/aws-cloud-controller-manager-tests-ext/... with
cmd/cloud-controller-manager-aws-tests-ext/... and include the additional files
present in the repo (e.g., go.mod and README.md at the top-level of that
module). Edit the README text that lists the tree (the section around the
example layout and lines 25-34) so it shows
"cmd/cloud-controller-manager-aws-tests-ext/" as the root, includes the
e2e/loadbalancer.go and e2e/helper.go entries, and lists main.go, go.mod, and
README.md to accurately reflect the current code location.

Comment on lines +51 to +56
cloud-controller-manager-aws-tests-ext:
pushd cmd/cloud-controller-manager-aws-tests-ext && \
GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
-trimpath \
-ldflags="$(LDFLAGS)" \
-o=../../bin/cloud-controller-manager-aws-tests-ext .
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
# Verify whether the Makefile switches recipes to bash.
grep -n '^SHELL' Makefile || echo "No SHELL override found; make will use its default shell."
sed -n '51,56p' Makefile

Repository: openshift/cluster-cloud-controller-manager-operator

Length of output: 434


Use cd instead of pushd in this recipe.

make recipes run under /bin/sh unless SHELL is overridden. pushd is a Bash builtin and will fail in CI with pushd: not found.

Proposed fix
 cloud-controller-manager-aws-tests-ext:
-	pushd cmd/cloud-controller-manager-aws-tests-ext && \
+	cd cmd/cloud-controller-manager-aws-tests-ext && \
 	 GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
 		-trimpath \
 		-ldflags="$(LDFLAGS)" \
 		-o=../../bin/cloud-controller-manager-aws-tests-ext .
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
cloud-controller-manager-aws-tests-ext:
pushd cmd/cloud-controller-manager-aws-tests-ext && \
GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
-trimpath \
-ldflags="$(LDFLAGS)" \
-o=../../bin/cloud-controller-manager-aws-tests-ext .
cloud-controller-manager-aws-tests-ext:
cd cmd/cloud-controller-manager-aws-tests-ext && \
GO111MODULE=on CGO_ENABLED=0 GOOS=$(GOOS) GOARCH=$(GOARCH) GOPROXY=$(GOPROXY) go build \
-trimpath \
-ldflags="$(LDFLAGS)" \
-o=../../bin/cloud-controller-manager-aws-tests-ext .
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Makefile` around lines 51 - 56, The Makefile recipe for target
cloud-controller-manager-aws-tests-ext uses the Bash builtin pushd which fails
under /bin/sh in CI; replace the pushd/popd usage with a POSIX-safe change
directory by using cd into cmd/cloud-controller-manager-aws-tests-ext (or wrap
the build in a subshell with (cd cmd/cloud-controller-manager-aws-tests-ext &&
GO111MODULE=... go build ...)) so the build runs under /bin/sh without requiring
Bash.

@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

mtulio added a commit to mtulio/openshift-origin that referenced this pull request Mar 12, 2026
Removing CCM-AWS OTE binary extraction temporarialy to unblock upstream
sync. This will be migrated to CCCMO project to prevent future issues
and keep the OTE extractions.

See also:
openshift/cluster-cloud-controller-manager-operator#437
@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

I don't know why multi job keeps failing, the recent changes fixed the .dockerignore, it's building locally normally:

$ podman build --authfile $PULL_SECRET_FILE -f Dockerfile .
...
[1/2] STEP 4/4: RUN make build &&    gzip /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/bin/cloud-controller-manager-aws-tests-ext
go build -o bin/cluster-controller-manager-operator cmd/cluster-cloud-controller-manager-operator/main.go
go build -o bin/config-sync-controllers cmd/config-sync-controllers/main.go
go build -o bin/azure-config-credentials-injector cmd/azure-config-credentials-injector/main.go
pushd cmd/cloud-controller-manager-aws-tests-ext && \
 GO111MODULE=on CGO_ENABLED=0 GOOS= GOARCH= GOPROXY= go build \
	-trimpath \
	-ldflags="" \
	-o=../../bin/cloud-controller-manager-aws-tests-ext .
/go/src/github.com/openshift/cluster-cloud-controller-manager-operator/cmd/cloud-controller-manager-aws-tests-ext /go/src/github.com/openshift/cluster-cloud-controller-manager-operator
--> 4fffd0e66b70
[2/2] STEP 1/7: FROM registry.ci.openshift.org/ocp/4.22:base-rhel9
Trying to pull registry.ci.openshift.org/ocp/4.22:base-rhel9...
Getting image source signatures
Copying blob 6a5df7a3b8e7 done   | 
Copying blob 6ca9984ef31f skipped: already exists  
Copying blob da75cf49117d skipped: already exists  
Copying blob 2920d84eafa0 skipped: already exists  
Copying config 5168d90912 done   | 
Writing manifest to image destination
[2/2] STEP 2/7: COPY --from=builder /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/bin/cluster-controller-manager-operator .
--> b201ddcbf916
[2/2] STEP 3/7: COPY --from=builder /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/bin/config-sync-controllers .
--> f46236643a51
[2/2] STEP 4/7: COPY --from=builder /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/bin/azure-config-credentials-injector .
--> a652ea3e92d9
[2/2] STEP 5/7: COPY --from=builder /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/manifests manifests
--> 9784d9158ded
[2/2] STEP 6/7: COPY --from=builder /go/src/github.com/openshift/cluster-cloud-controller-manager-operator/bin/cloud-controller-manager-aws-tests-ext.gz /usr/bin/cloud-controller-manager-aws-tests-ext.gz
--> 05d3a001abb8
[2/2] STEP 7/7: LABEL io.openshift.release.operator true
[2/2] COMMIT
--> 06077c74ce62
06077c74ce62314c8cb2e902aa997952b205ef18cc687e085771209f46b6fe48

cache? I will retry:

@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

2 similar comments
@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

@mtulio
Copy link
Contributor Author

mtulio commented Mar 12, 2026

Following this job, I can see the binary /usr/bin/cloud-controller-manager-aws-tests-ext.gz is being extracted from the CCCMO image cluster-cloud-controller-manager-operator successfully, as well listing the tests to the runtime:

time="2026-03-12T18:26:46Z" level=info msg="Extension openshift:payload:aws-cloud-controller-manager found in cluster-cloud-controller-manager-operator:cloud-controller-manager-aws-tests-ext using API version v1.1"

time="2026-03-12T18:26:43Z" level=info msg="Extracted /usr/bin/cloud-controller-manager-aws-tests-ext.gz for tag cluster-cloud-controller-manager-operator from registry.build05.ci.openshift.org/ci-op-csf89c2l/stable@sha256:7b82e1702a4a5722da1604eb3b18e70afc9348d094da079c467760663aa871a1 (disk size 99103416, extraction duration 4.831883613s)"

time="2026-03-12T18:26:45Z" level=info msg="Using existing binary /tmp/home/.cache/openshift-tests/registry_build05_ci_openshift_org_ci-op-csf89c2l_release_sha256_d0d58e1f11f1bcae03d7e6d25ab81cdf50d99f279da96fed29a2fe67d36e8c69_67793f4b6176/cloud-controller-manager-aws-tests-ext for tag cluster-cloud-controller-manager-operator"

time="2026-03-12T18:26:46Z" level=info msg="Listing tests" binary=cloud-controller-manager-aws-tests-ext
time="2026-03-12T18:26:46Z" level=info msg="OTE API version is: v1.1" binary=cloud-controller-manager-aws-tests-ext

time="2026-03-12T18:26:46Z" level=info msg="Listed 13 tests in 70.244079ms" binary=cloud-controller-manager-aws-tests-ext

The job is still running.

@openshift-ci-robot
Copy link

openshift-ci-robot commented Mar 12, 2026

@mtulio: This pull request references SPLAT-2672 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:

Blocks:

Summary by CodeRabbit

  • New Features

  • Added an AWS tests extension providing end-to-end suites that validate Network Load Balancer security group behavior and feature‑gate interactions.

  • Documentation

  • Added a comprehensive README with prerequisites, build/run instructions, test usage, and examples.

  • Chores

  • Updated build and container packaging to include the new test binary and reduced Docker build context via ignore rules.

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.

@mtulio
Copy link
Contributor Author

mtulio commented Mar 13, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

@mtulio
Copy link
Contributor Author

mtulio commented Mar 13, 2026

origin PR rebase to temp removing CCM-AWS OTE to unblock cloud team, re-testing:

@mtulio
Copy link
Contributor Author

mtulio commented Mar 13, 2026

/testwith openshift/cluster-cloud-controller-manager-operator/main/e2e-aws-ovn openshift/origin#30864 openshift/cloud-provider-aws#133

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

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. 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.

2 participants