Skip to content

OSASINFRA-4400: Add cluster-network-config ConfigMap to support max_allowed_address_pairs in OpenStack#3058

Open
danchild wants to merge 2 commits into
openshift:masterfrom
shiftstack:cloud-network-config-cm
Open

OSASINFRA-4400: Add cluster-network-config ConfigMap to support max_allowed_address_pairs in OpenStack#3058
danchild wants to merge 2 commits into
openshift:masterfrom
shiftstack:cloud-network-config-cm

Conversation

@danchild

@danchild danchild commented Jul 15, 2026

Copy link
Copy Markdown
Member

Following work in openshift/cloud-network-config-controller/pull/230, a mechanism is required to pass the configured max_allowed_address_pairs as a command line argument to the controller.

New feature includes:

  • Add a bootstrap result type for a new cloud-network-config ConfigMap,
    reading it if the platform type is OpenStack
  • Validate platform-os-max-allowed-address-pairs, returning an error
    if it is negative, explicitly set to 0, or an invalid number (e.g.
    alphabetic string)
  • Pass platform-os-max-allowed-address-pairs to the
    cloud-network-config-controller as a command line argument
  • Check for changes to cloud-network-config, restarting the
    cloud-network-config-controller if there's a diff

Please note that openshift/cloud-network-config-controller/pull/230 must be accepted and merged before accepting these changes.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

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

openshift-ci-robot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

@danchild: This pull request references OSASINFRA-4400 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 "5.0.0" version, but no target version was set.

Details

In response to this:

TODO

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 Jul 15, 2026
@openshift-ci

openshift-ci Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

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

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Walkthrough

The change reads platform-os-max-allowed-address-pairs from the OpenStack cloud-network ConfigMap, validates and propagates it through bootstrap and rendering, and conditionally adds the corresponding flag to managed and self-hosted controller deployments.

Changes

OpenStack address-pair configuration

Layer / File(s) Summary
Bootstrap cloud-network configuration
pkg/bootstrap/types.go, pkg/network/bootstrap.go, pkg/network/bootstrap_test.go
Bootstrap results now carry the raw and parsed address-pair value, which is read from the OpenStack cloud-network-config ConfigMap and covered across platform and input cases.
Render validation and data wiring
pkg/network/cloud_network.go, pkg/network/cloud_network_test.go
Rendering rejects set values that are zero, negative, or non-integer, and passes valid values and their set state into template data.
Controller flag rendering
bindata/cloud-network-config-controller/*/controller.yaml, pkg/network/cloud_network_test.go
Managed and self-hosted controller templates conditionally emit -platform-os-max-allowed-address-pairs and test its rendered presence or absence.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Infrastructure
  participant Bootstrap
  participant ConfigMap
  participant Renderer
  participant ControllerDeployment
  Infrastructure->>Bootstrap: report OpenStack platform
  Bootstrap->>ConfigMap: fetch cloud-network-config
  ConfigMap-->>Bootstrap: return raw address-pair value
  Bootstrap->>Renderer: provide parsed value and set state
  Renderer->>Renderer: validate positive integer
  Renderer->>ControllerDeployment: render conditional controller flag
Loading

Caution

Pre-merge checks failed

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

  • Ignore

❌ Failed checks (4 errors, 1 warning)

Check name Status Explanation Resolution
Pr Quality ❌ Error The PR is scoped (438 added lines), but the description lacks a required CI/testing section and omits upgrade/rollback considerations for this behavior change. Add a How to verify it/Testing section with the CI lanes and platforms, and include upgrade/rollback notes plus any user-impact details in the PR description.
E2e Tests For Feature Changes ❌ Error pkg/network/bootstrap.go and cloud_network.go add user-facing config handling; no test/e2e files changed and the PR description has no Testing/How to verify section. Add e2e coverage under test/e2e and a Testing/How to verify section with CI lanes, platforms, and results; if infeasible, justify that there and use @coderabbitai ignore pre-merge checks after other fixes.
Docs For Feature And Behavior Changes ❌ Error PR adds a new OpenStack config/CLI flag and behavior in pkg/network and bindata, but the merge-base diff shows no docs/ files changed. Add a docs/ markdown file covering cloud-network-config, the new platform-os-max-allowed-address-pairs option, validation, and restart behavior.
Title check ❌ Error The title is relevant, but it exceeds the 72-character limit and lacks the requested component-scoped prefix. Shorten the title to under 72 characters and use the required component-scoped prefix, keeping the imperative mood.
Docstring Coverage ⚠️ Warning Docstring coverage is 28.57% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (19 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Commit Message Quality ✅ Passed Both PR commits are non-merge, concise, and logically grouped; their bodies give feature context and avoid vague or unrelated change bundles.
Unit Tests For Go Changes ✅ Passed PASS: The Go/bindata changes are accompanied by updated tests in pkg/network/bootstrap_test.go and pkg/network/cloud_network_test.go covering bootstrap, validation, and template rendering.
Rbac Least Privilege ✅ Passed No YAML changes under bindata/ or manifests/ were in the PR diff; only Go test files were modified, so no RBAC rules changed.
Stale Project Docs And Config ✅ Passed Scanned docs/config refs; only .coderabbit.yaml and docs/architecture.md mention related areas, and both remain accurate after this PR.
Go And Test Code Quality ✅ Passed No modified Go/test code shows banned logging, bare error-only test failures, os.Setenv/time.Sleep, or other listed issues.
Ai-Generated Code Smell ✅ Passed No obvious AI-slop or AI references in the added code; the new tests are table-driven and directly cover the new bootstrap/rendering behavior.
Stable And Deterministic Test Names ✅ Passed The added tests use static t.Run names only; I found no dynamic titles, generated identifiers, dates, IPs, or other unstable content.
Test Structure And Quality ✅ Passed The touched tests are plain table-driven unit tests, not Ginkgo; they use no cluster waits or resource setup/cleanup and include clear failure messages.
Microshift Test Compatibility ✅ Passed The added tests are plain Go unit tests (testing.T), not Ginkgo e2e tests, so the MicroShift-specific API/feature check does not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed PASS: the added tests are plain Go unit/template tests, not Ginkgo e2e, and they contain no multi-node or SNO-unsafe assumptions.
Topology-Aware Scheduling Compatibility ✅ Passed Only a new controller CLI arg/config plumbing was added; no replicas, affinity, nodeSelector, tolerations, or topology-based scheduling logic changed.
Ote Binary Stdout Contract ✅ Passed No changed process-level code writes to stdout; the new logging is confined to helper functions, while main still initializes logs normally.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed Only Go unit/render tests were added; I found no new Ginkgo e2e tests, IPv4-only assumptions, or external connectivity dependencies.
No-Weak-Crypto ✅ Passed Changed files only add config parsing/rendering; searches found no MD5/SHA1/DES/RC4, custom crypto, or secret/token comparisons.
Container-Privileges ✅ Passed Changed manifests keep allowPrivilegeEscalation:false and drop ALL; no privileged, hostPID/hostNetwork/hostIPC, or SYS_ADMIN settings were added.
No-Sensitive-Data-In-Logs ✅ Passed New warnings only log configmap names and the numeric platform-os-max-allowed-address-pairs value; no passwords, tokens, PII, or hostnames are logged.
Description check ✅ Passed The description clearly matches the change set and summarizes the new OpenStack ConfigMap flow, validation, and controller flag.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@openshift-ci

openshift-ci Bot commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

@danchild
danchild force-pushed the cloud-network-config-cm branch 2 times, most recently from c0144b5 to 666ef2c Compare July 16, 2026 13:47
@danchild
danchild marked this pull request as ready for review July 16, 2026 13:54
@openshift-ci openshift-ci Bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jul 16, 2026
@openshift-ci
openshift-ci Bot requested review from jcaamano and marty-power July 16, 2026 14:00

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@bindata/cloud-network-config-controller/self-hosted/controller.yaml`:
- Around line 50-54: Convert the container args flow sequence around the
existing "-secret-name" and OSMaxAllowedAddressPairs template entries into a
YAML block sequence using list-item syntax. Preserve the current argument values
and conditional inclusion controlled by OSMaxAllowedAddressPairsIsSet and
OSMaxAllowedAddressPairs.

In `@pkg/network/bootstrap.go`:
- Around line 76-107: Update cloudNetworkConfigBootstrap to return the API error
alongside CloudNetworkConfigBootstrapResult, propagating transient errors from
cl.Get instead of logging and returning an empty result. Adjust Bootstrap and
its caller handling to receive the error and return it so reconciliation
requeues with backoff; preserve the existing not-found and successful
configuration behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Central YAML (inherited)

Review profile: CHILL

Plan: Enterprise

Run ID: 10ffe051-5f03-4806-86dd-a122e8f1e1f3

📥 Commits

Reviewing files that changed from the base of the PR and between 76e94f2 and 666ef2c.

📒 Files selected for processing (7)
  • bindata/cloud-network-config-controller/managed/controller.yaml
  • bindata/cloud-network-config-controller/self-hosted/controller.yaml
  • pkg/bootstrap/types.go
  • pkg/network/bootstrap.go
  • pkg/network/bootstrap_test.go
  • pkg/network/cloud_network.go
  • pkg/network/cloud_network_test.go

Comment on lines +50 to +54
"-secret-name", "cloud-credentials"
{{- if and .OSMaxAllowedAddressPairsIsSet (gt .OSMaxAllowedAddressPairs 0) }}
,"-platform-os-max-allowed-address-pairs={{ .OSMaxAllowedAddressPairs }}"
{{- end }}
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Convert args to a YAML block sequence.

Using Go templates within a YAML flow sequence ([...]) causes syntax errors during static analysis (as indicated by the Yamllint error). Converting the args array into a block sequence (a bulleted list) resolves this parser issue and perfectly aligns with standard Kubernetes manifest conventions.

🛠️ Proposed fix to use block sequence
-        args: [ "-platform-type", "{{.PlatformType}}",
-                "-platform-region={{.PlatformRegion}}",
-                "-platform-api-url={{.PlatformAPIURL}}",
-                "-platform-aws-ca-override={{.PlatformAWSCAPath}}",
-                "-platform-azure-environment={{.PlatformAzureEnvironment}}",
-                "-secret-name", "cloud-credentials"
-{{- if and .OSMaxAllowedAddressPairsIsSet (gt .OSMaxAllowedAddressPairs 0) }}
-                ,"-platform-os-max-allowed-address-pairs={{ .OSMaxAllowedAddressPairs }}"
-{{- end }}
-                ]
+        args:
+        - "-platform-type"
+        - "{{.PlatformType}}"
+        - "-platform-region={{.PlatformRegion}}"
+        - "-platform-api-url={{.PlatformAPIURL}}"
+        - "-platform-aws-ca-override={{.PlatformAWSCAPath}}"
+        - "-platform-azure-environment={{.PlatformAzureEnvironment}}"
+        - "-secret-name"
+        - "cloud-credentials"
+{{- if and .OSMaxAllowedAddressPairsIsSet (gt .OSMaxAllowedAddressPairs 0) }}
+        - "-platform-os-max-allowed-address-pairs={{ .OSMaxAllowedAddressPairs }}"
+{{- end }}
📝 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
"-secret-name", "cloud-credentials"
{{- if and .OSMaxAllowedAddressPairsIsSet (gt .OSMaxAllowedAddressPairs 0) }}
,"-platform-os-max-allowed-address-pairs={{ .OSMaxAllowedAddressPairs }}"
{{- end }}
]
args:
- "-platform-type"
- "{{.PlatformType}}"
- "-platform-region={{.PlatformRegion}}"
- "-platform-api-url={{.PlatformAPIURL}}"
- "-platform-aws-ca-override={{.PlatformAWSCAPath}}"
- "-platform-azure-environment={{.PlatformAzureEnvironment}}"
- "-secret-name"
- "cloud-credentials"
{{- if and .OSMaxAllowedAddressPairsIsSet (gt .OSMaxAllowedAddressPairs 0) }}
- "-platform-os-max-allowed-address-pairs={{ .OSMaxAllowedAddressPairs }}"
{{- end }}
🧰 Tools
🪛 YAMLlint (1.37.1)

[error] 51-51: syntax error: expected ',' or ']', but got '{'

(syntax)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@bindata/cloud-network-config-controller/self-hosted/controller.yaml` around
lines 50 - 54, Convert the container args flow sequence around the existing
"-secret-name" and OSMaxAllowedAddressPairs template entries into a YAML block
sequence using list-item syntax. Preserve the current argument values and
conditional inclusion controlled by OSMaxAllowedAddressPairsIsSet and
OSMaxAllowedAddressPairs.

Source: Linters/SAST tools

Comment thread pkg/network/bootstrap.go
Comment on lines +76 to +107

func cloudNetworkConfigBootstrap(cl crclient.Reader) bootstrap.CloudNetworkConfigBootstrapResult {
result := bootstrap.CloudNetworkConfigBootstrapResult{}

cm := &corev1.ConfigMap{}
if err := cl.Get(context.TODO(), types.NamespacedName{
Namespace: "openshift-network-operator",
Name: "cloud-network-config",
}, cm); err != nil {
if !apierrors.IsNotFound(err) {
klog.Warningf("Error fetching cloud-network-config configmap: %v", err)
}
return result
}

raw, ok := cm.Data["platform-os-max-allowed-address-pairs"]
if !ok {
return result
}

result.OSMaxAllowedAddressPairs.IsSet = true
result.OSMaxAllowedAddressPairs.RawValue = raw

val, err := strconv.Atoi(raw)
if err != nil {
klog.Warningf("Error parsing cloud-network-config platform-os-max-allowed-address-pairs=%q: %v", raw, err)
return result
}

result.OSMaxAllowedAddressPairs.Value = val
return result
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Bubble up transient API errors instead of swallowing them.

If fetching the cloud-network-config ConfigMap fails due to a transient API error (e.g., API server unavailable), the current implementation logs a warning and returns an empty result, acting as if the configuration does not exist. This can cause the controller to silently roll back to default settings during a temporary outage.

As per path instructions, "Never ignore error returns". Return the API error so the reconciliation loop can correctly requeue and retry via exponential backoff.

🛡️ Proposed fix to propagate transient API errors

Apply this fix to the cloudNetworkConfigBootstrap signature and its caller in Bootstrap (around line 40):

@@ -38,5 +38,8 @@
 	if infraStatus.PlatformType == configv1.OpenStackPlatformType {
-		out.CloudNetworkConfig = cloudNetworkConfigBootstrap(client.ClientFor("").CRClient())
+		cnc, err := cloudNetworkConfigBootstrap(client.ClientFor("").CRClient())
+		if err != nil {
+			return nil, err
+		}
+		out.CloudNetworkConfig = cnc
 	}
@@ -76,14 +79,14 @@
-func cloudNetworkConfigBootstrap(cl crclient.Reader) bootstrap.CloudNetworkConfigBootstrapResult {
+func cloudNetworkConfigBootstrap(cl crclient.Reader) (bootstrap.CloudNetworkConfigBootstrapResult, error) {
 	result := bootstrap.CloudNetworkConfigBootstrapResult{}
 
 	cm := &corev1.ConfigMap{}
 	if err := cl.Get(context.TODO(), types.NamespacedName{
 		Namespace: "openshift-network-operator",
 		Name:      "cloud-network-config",
 	}, cm); err != nil {
 		if !apierrors.IsNotFound(err) {
-			klog.Warningf("Error fetching cloud-network-config configmap: %v", err)
+			return result, fmt.Errorf("error fetching cloud-network-config configmap: %w", err)
 		}
-		return result
+		return result, nil
 	}
 
 	raw, ok := cm.Data["platform-os-max-allowed-address-pairs"]
 	if !ok {
-		return result
+		return result, nil
 	}
 
 	result.OSMaxAllowedAddressPairs.IsSet = true
 	result.OSMaxAllowedAddressPairs.RawValue = raw
 
 	val, err := strconv.Atoi(raw)
 	if err != nil {
 		klog.Warningf("Error parsing cloud-network-config platform-os-max-allowed-address-pairs=%q: %v", raw, err)
-		return result
+		return result, nil
 	}
 
 	result.OSMaxAllowedAddressPairs.Value = val
-	return result
+	return result, nil
 }
📝 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
func cloudNetworkConfigBootstrap(cl crclient.Reader) bootstrap.CloudNetworkConfigBootstrapResult {
result := bootstrap.CloudNetworkConfigBootstrapResult{}
cm := &corev1.ConfigMap{}
if err := cl.Get(context.TODO(), types.NamespacedName{
Namespace: "openshift-network-operator",
Name: "cloud-network-config",
}, cm); err != nil {
if !apierrors.IsNotFound(err) {
klog.Warningf("Error fetching cloud-network-config configmap: %v", err)
}
return result
}
raw, ok := cm.Data["platform-os-max-allowed-address-pairs"]
if !ok {
return result
}
result.OSMaxAllowedAddressPairs.IsSet = true
result.OSMaxAllowedAddressPairs.RawValue = raw
val, err := strconv.Atoi(raw)
if err != nil {
klog.Warningf("Error parsing cloud-network-config platform-os-max-allowed-address-pairs=%q: %v", raw, err)
return result
}
result.OSMaxAllowedAddressPairs.Value = val
return result
}
func cloudNetworkConfigBootstrap(cl crclient.Reader) (bootstrap.CloudNetworkConfigBootstrapResult, error) {
result := bootstrap.CloudNetworkConfigBootstrapResult{}
cm := &corev1.ConfigMap{}
if err := cl.Get(context.TODO(), types.NamespacedName{
Namespace: "openshift-network-operator",
Name: "cloud-network-config",
}, cm); err != nil {
if !apierrors.IsNotFound(err) {
return result, fmt.Errorf("error fetching cloud-network-config configmap: %w", err)
}
return result, nil
}
raw, ok := cm.Data["platform-os-max-allowed-address-pairs"]
if !ok {
return result, nil
}
result.OSMaxAllowedAddressPairs.IsSet = true
result.OSMaxAllowedAddressPairs.RawValue = raw
val, err := strconv.Atoi(raw)
if err != nil {
klog.Warningf("Error parsing cloud-network-config platform-os-max-allowed-address-pairs=%q: %v", raw, err)
return result, nil
}
result.OSMaxAllowedAddressPairs.Value = val
return result, nil
}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/network/bootstrap.go` around lines 76 - 107, Update
cloudNetworkConfigBootstrap to return the API error alongside
CloudNetworkConfigBootstrapResult, propagating transient errors from cl.Get
instead of logging and returning an empty result. Adjust Bootstrap and its
caller handling to receive the error and return it so reconciliation requeues
with backoff; preserve the existing not-found and successful configuration
behavior.

Source: Path instructions

@danchild
danchild force-pushed the cloud-network-config-cm branch from 666ef2c to 62b0134 Compare July 16, 2026 14:40
danchild added 2 commits July 16, 2026 10:42
Following `openshift/cloud-network-config-controller` openshift#230,
a mechanism is required to pass the configured
`max_allowed_address_pairs` as a command line argument
to the controller.

New feature includes:

- Add a bootstrap result type for a new `cloud-network-config` ConfigMap,
  reading it if the platform type is OpenStack
- Validate `platform-os-max-allowed-address-pairs`, returning an error
  if it is negative, explicitly set to 0, or an invalid number (e.g.
  alphabetic string)
- Pass platform-os-max-allowed-address-pairs to the
  `cloud-network-config-controller` as a command line argument
- Check for changes to `cloud-network-config`, restarting the
  cloud-network-config-controller if there's a diff

Signed-off-by: Dan Childers <dchilder@redhat.com>
Exercise managed and self-hosted template rendering for the new
max_allowed_address_pairs flag, including zero, negative, non-integer,
valid, and unset cases.

Signed-off-by: Dan Childers <dchilder@redhat.com>
@danchild
danchild force-pushed the cloud-network-config-cm branch from 62b0134 to 1a3f781 Compare July 16, 2026 14:43
@openshift-ci

openshift-ci Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

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

Test name Commit Details Required Rerun command
ci/prow/5.0-upgrade-from-stable-4.22-e2e-azure-ovn-upgrade 1a3f781 link false /test 5.0-upgrade-from-stable-4.22-e2e-azure-ovn-upgrade
ci/prow/5.0-upgrade-from-stable-4.22-e2e-aws-ovn-upgrade 1a3f781 link false /test 5.0-upgrade-from-stable-4.22-e2e-aws-ovn-upgrade
ci/prow/5.0-upgrade-from-stable-4.22-e2e-gcp-ovn-upgrade 1a3f781 link false /test 5.0-upgrade-from-stable-4.22-e2e-gcp-ovn-upgrade

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.

@danchild

Copy link
Copy Markdown
Member Author

/verified by @danchild

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Jul 17, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@danchild: This PR has been marked as verified by @danchild.

Details

In response to this:

/verified by @danchild

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.

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

Labels

jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants