Skip to content

[DNM] d/s EVPN E2E: overlapping L3/L2 CUDNs isolation tests over L3/L2 VPNs#3245

Open
jechen0648 wants to merge 3 commits into
openshift:mainfrom
jechen0648:overlapping_cudns_over_evpn_ds
Open

[DNM] d/s EVPN E2E: overlapping L3/L2 CUDNs isolation tests over L3/L2 VPNs#3245
jechen0648 wants to merge 3 commits into
openshift:mainfrom
jechen0648:overlapping_cudns_over_evpn_ds

Conversation

@jechen0648

@jechen0648 jechen0648 commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

📑 Description

Fixes #

Additional Information for reviewers

✅ Checks

  • My code requires changes to the documentation
  • if so, I have updated the documentation as required
  • My code requires tests
  • if so, I have added and/or updated the tests as required
  • All the tests have passed in the CI

How to verify it

Summary by CodeRabbit

  • Tests

    • Added EVPN e2e coverage for overlapping-subnet shared VTEP scenarios, including L3 (IP-VRF), L2 (MAC-VRF), and combined MAC-VRF/IP-VRF variants.
    • Expanded route-advertisement isolation checks for overlapping CIDRs with shared VTEPs, including updated expectations around same-IP reachability and new north-south validation.
  • Test Infrastructure

    • Updated EVPN test network setup to optionally use a proxy-style Docker network approach for MAC-VRF external containers.

@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Walkthrough

This PR extends the OpenShift OVN-Kubernetes test suite to support EVPN testing scenarios where multiple networks share overlapping CIDR subnets using a shared VTEP. It introduces MAC-VRF Docker proxy mode to handle subnet overlap, adds a new EVPN test type, and updates isolation verification to account for intentional IP overlap with VNI-based isolation.

Changes

EVPN Overlapping Subnet Shared VTEP Testing

Layer / File(s) Summary
MAC-VRF Docker Proxy Mode Infrastructure
test/e2e/evpn.go, test/e2e/kubevirt.go
setupMACVRFExternalContainer now accepts useProxyDockerNetwork flag. When enabled, it creates the Docker network without explicit subnets and reassigns container IPs to match intended CUDN subnets, with optional IPv6 enablement via sysctl. Parameter is threaded through runEVPNNetworkAndServers signature and updated at all call sites.
EVPN Overlapping Shared VTEP Type and Infrastructure
test/e2e/route_advertisements.go
Introduces cudnAdvertisedEVPNOverlappingCIDRSharedVTEP network type constant. EVPN infra configuration extends to handle the new type via runEVPNNetworkAndServers with proxy mode enabled. Shared VTEP naming improved by deriving bridge/VXLAN names from test name so multiple networks land on the same external FRR device. Namespace creation treats overlapping EVPN as advertised VRF scenario.
Test Spec Generation and Overlapping Variant Matrix
test/e2e/route_advertisements.go
Persists tested network spec for reuse. New overlappingSpecGen helper deep-copies the tested spec, randomizes EVPN VNI(s), and clears VTEP to force overlapping-subnet isolation testing. New getExternalServerIPForFamily helper provides consistent external server IP lookup. Conditionally appends table entry for overlapping EVPN mode. Refines otherNetworkSpec nil handling for default network cases.
Overlapping CIDR Pod Reachability and Isolation Assertions
test/e2e/route_advertisements.go
Pod-to-pod reachability assertions updated to verify self-reachability at own IP via hostname instead of expecting failure based on IP mismatch. Cross-network request logic identifies which peer pod shares tested pod's IP and validates appropriate reach or fail behavior. New north-south validation ensures tested pod reaches external servers at shared IP, verifying VNI isolation behavior.
EVPN Test Case Registration
openshift/test/tests.go
Three new overlapping-subnet shared-VTEP EVPN test case identifiers appended to InformingTests for test discovery: Layer 3 shared VTEP (IP-VRF), Layer 2 shared VTEP (MAC-VRF), and Layer 2 combined (MAC-VRF+IP-VRF).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • openshift/ovn-kubernetes#3220: Both PRs modify openshift/test/tests.go by changing InformingTests EVPN RouteAdvertisements/isolation test-case entries (main PR adds new overlapping subnet shared-VTEP EVPN cases; related PR updates EVPN scenario names and reachability expectations).

Suggested reviewers

  • jcaamano
  • tssurya

Poem

A network test takes shape with grace,
Where overlapping subnets find their place.
With shared VTEP and VNI's care,
The pods reach themselves—everywhere!
🐰 Infrastructure, woven with flair! 🌐

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '[DNM] d/s EVPN E2E: overlapping L3/L2 CUDNs isolation tests over L3/L2 VPNs' accurately reflects the main purpose of the changes: adding EVPN end-to-end tests for overlapping CUDN isolation scenarios.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

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

✨ 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 and usage tips.

@openshift-ci openshift-ci Bot requested review from kyrtapz and tssurya June 10, 2026 23:19
@openshift-ci

openshift-ci Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

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

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

🧹 Nitpick comments (1)
test/e2e/route_advertisements.go (1)

2718-2724: ⚡ Quick win

Add a defensive nil check for spec.EVPN.

Although the comment on Line 2715 states that testNetworkSpec is guaranteed to have an EVPN config (because overlappingSpecGen is only called when testedNetworkType == cudnAdvertisedEVPNUnmanagedSharedVTEP), accessing spec.EVPN.MACVRF and spec.EVPN.IPVRF without first checking spec.EVPN != nil could panic if the runtime assumption is violated.

🛡️ Proposed defensive guard
 overlappingSpecGen := func() *udnv1.NetworkSpec {
     spec := testNetworkSpec.DeepCopy()
+    if spec.EVPN == nil {
+        ginkgo.Fail("overlappingSpecGen requires an EVPN network spec")
+    }
     if spec.EVPN.MACVRF != nil {
         spec.EVPN.MACVRF.VNI = randomVNI()
     }
🤖 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 `@test/e2e/route_advertisements.go` around lines 2718 - 2724, The code assumes
spec.EVPN is non-nil but may panic; wrap the existing mutations to spec.EVPN
(accesses to spec.EVPN.MACVRF, spec.EVPN.IPVRF and setting spec.EVPN.VTEP) in a
defensive nil check: if spec.EVPN != nil { ... } so randomVNI() is only called
and VTEP set when EVPN exists; refer to symbols spec.EVPN, MACVRF, IPVRF, VTEP,
randomVNI, testNetworkSpec/overlappingSpecGen and
testedNetworkType/cudnAdvertisedEVPNUnmanagedSharedVTEP to locate the code to
guard.
🤖 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 `@test/e2e/route_advertisements.go`:
- Around line 2130-2137: The code assigns bridgeName and vxlanName from testName
twice (bridgeName = "br"+testName; vxlanName = "vx"+testName), making the first
assignments dead; remove the duplicated pair so only one assignment remains
(keep the assignment nearest the VTEP context where vtepName =
sharedNodeIPsVTEPName is set) and ensure references to bridgeName, vxlanName,
testName and vtepName remain unchanged.

---

Nitpick comments:
In `@test/e2e/route_advertisements.go`:
- Around line 2718-2724: The code assumes spec.EVPN is non-nil but may panic;
wrap the existing mutations to spec.EVPN (accesses to spec.EVPN.MACVRF,
spec.EVPN.IPVRF and setting spec.EVPN.VTEP) in a defensive nil check: if
spec.EVPN != nil { ... } so randomVNI() is only called and VTEP set when EVPN
exists; refer to symbols spec.EVPN, MACVRF, IPVRF, VTEP, randomVNI,
testNetworkSpec/overlappingSpecGen and
testedNetworkType/cudnAdvertisedEVPNUnmanagedSharedVTEP to locate the code to
guard.
🪄 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: Path: .coderabbit.yml

Review profile: CHILL

Plan: Enterprise

Run ID: 9008e1c5-001b-42f1-a6d5-51dfab92a3d4

📥 Commits

Reviewing files that changed from the base of the PR and between e9295c0 and bf84d06.

⛔ Files ignored due to path filters (1)
  • openshift/test/generated/zz_generated.annotations.go is excluded by !**/generated/**
📒 Files selected for processing (4)
  • openshift/test/tests.go
  • test/e2e/evpn.go
  • test/e2e/kubevirt.go
  • test/e2e/route_advertisements.go

Comment thread test/e2e/route_advertisements.go Outdated
@openshift-ci openshift-ci Bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 17, 2026
jechen0648 and others added 3 commits June 18, 2026 22:40
…ervers

Add a macVRFUseProxyDockerNetwork bool parameter to runEVPNNetworkAndServers
and a useProxyDockerNetwork bool parameter to setupMACVRFExternalContainer.

When true, setupMACVRFExternalContainer creates the Docker network without
explicit subnets (Docker picks a random unused range, avoiding rejection of
a second network with the same CUDN CIDR), then reassigns the container IPs
to match the actual CUDN subnets via a single sh -c command that:
  - flushes the Docker-assigned IPs from the interface
  - enables IPv6 if needed (CreateNetwork infers IP family from subnets;
    nil subnets produce an IPv4-only network that disables IPv6)
  - adds each CUDN address with the correct prefix length

The Docker bridge forwards L2 frames by MAC regardless of IP addressing,
so the proxy subnet has no functional effect on EVPN traffic.

For non-overlapping call-sites such as kubevirt.go, false is passed in.

Signed-off-by: Jean Chen <jechen@redhat.com>
… table

Add a single overlapping-subnet entry to the otherNetworksToTest table inside
DescribeTableSubtree("When the tested network is of type") to verify traffic
isolation between two EVPN CUDNs that share the same subnet but use different
VNIs. The entry is appended only when the outer tested network type is
cudnAdvertisedEVPNUnmanagedSharedVTEP, so exactly three test cases are
produced (one per shared-VTEP topology: L3 IP-VRF, L2 MAC-VRF, L2 MAC-VRF +
IP-VRF).

Key implementation details:

New cudnAdvertisedEVPNOverlappingCIDRSharedVTEP network type: Uses shared
VTEP (kind primary-network subnet and sharedNodeIPsVTEPName). Both overlapping
CUDNs within the same test share a single bridge/VXLAN on the external FRR
(names derived from testName, same as cudnAdvertisedEVPNUnmanagedSharedVTEP).
Isolation between the two overlapping networks is enforced by their different
VNIs, which come from independent AllocateBGP allocations.

Single adaptive overlappingSpecGen closure: DeepCopies testNetworkSpec (the
spec of the currently-tested outer network) and stamps fresh VNIs from the
inner bgpAlloc, clearing VTEP so the shared VTEP is used. This replaces three
separate topology-specific generators and avoids nil-return skip logic.

macVRFUseProxyDockerNetwork: Passed as true for the overlapping type so Docker
does not reject creating a second network with the same CUDN CIDR. See the
companion commit for details on the proxy-network mechanism.

Hostname-based isolation checks for overlapping IPs: When a source pod shares
the same IP as the tested pod, testPodToHostnameAndExpect verifies it reaches
itself (its own hostname), confirming traffic stays within its own CUDN. When
the source pod has a different IP, its same-network peer may still share the
tested pod's IP; in that case routing within the other network delivers the
packet to the peer rather than to the tested pod. The peer is determined
symmetrically (otherPodSameNode ↔ otherPodDiffNode) so both allocation orders
are handled correctly regardless of which pod happens to get the overlapping IP.

North-south VNI isolation check: Since both overlapping networks assign the
same IP to their MAC-VRF external containers (both derive container IPs from
the shared CUDN subnet), a hostname check is added inside "Both networks are
isolated" to verify that testPod reaches its own external server at the shared
IP and not the other network's container. The check reuses the outer-scope
externalServers (testNetwork's servers, which have correct Docker-registered
IPs) so no additional setup is required.

getExternalServerIPForFamily helper: Extracts the repeated pattern of fetching
an external container's network interface and returning its IP for a given
family into a shared closure, removing duplication across three call sites.

Signed-off-by: Jean Chen <jechen@redhat.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…p by OTE

Signed-off-by: Jean Chen <jechen@redhat.com>
@jechen0648 jechen0648 force-pushed the overlapping_cudns_over_evpn_ds branch from bf84d06 to ecf4816 Compare June 22, 2026 02:41
@openshift-ci openshift-ci Bot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 22, 2026

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

🤖 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 `@test/e2e/evpn.go`:
- Around line 744-771: The info.containerIPs field is not updated after the IP
reassignment shell commands are executed, causing the returned info object to
contain outdated Docker-assigned IPs instead of the new CUDN IPs. After the
ExecExternalContainerCommand call succeeds in the useProxyDockerNetwork block,
update info.containerIPs by assigning the containerIPs variable (which contains
the correct CUDN IP addresses) to info.containerIPs so that subsequent code and
callers receive the correct IP addresses.
🪄 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: Path: .coderabbit.yml

Review profile: CHILL

Plan: Enterprise

Run ID: 33919fe9-3100-4f36-ab38-31cd9f8de0e5

📥 Commits

Reviewing files that changed from the base of the PR and between bf84d06 and ecf4816.

⛔ Files ignored due to path filters (1)
  • openshift/test/generated/zz_generated.annotations.go is excluded by !**/generated/**
📒 Files selected for processing (4)
  • openshift/test/tests.go
  • test/e2e/evpn.go
  • test/e2e/kubevirt.go
  • test/e2e/route_advertisements.go
💤 Files with no reviewable changes (1)
  • test/e2e/route_advertisements.go
🚧 Files skipped from review as they are similar to previous changes (2)
  • test/e2e/kubevirt.go
  • openshift/test/tests.go

Comment thread test/e2e/evpn.go
Comment on lines +744 to +771
if useProxyDockerNetwork {
shellCmds := []string{
fmt.Sprintf("ip addr flush dev %s", info.containerInterface),
}
// CreateNetwork infers IP family from the subnets passed to it; with nil
// subnets it creates an IPv4-only network, which disables IPv6 on the
// interface. Enable it so we can add IPv6 CUDN addresses.
if ipFamilies.Has(utilnet.IPv6) {
shellCmds = append(shellCmds,
fmt.Sprintf("sysctl -w net.ipv6.conf.%s.disable_ipv6=0", info.containerInterface))
}
for i, subnet := range subnets {
_, ipNet, parseErr := net.ParseCIDR(subnet)
if parseErr != nil {
return nil, fmt.Errorf("failed to parse CUDN subnet %s: %w", subnet, parseErr)
}
prefixLen, _ := ipNet.Mask.Size()
addr := fmt.Sprintf("%s/%d", containerIPs[i], prefixLen)
shellCmds = append(shellCmds,
fmt.Sprintf("ip addr add %s dev %s", addr, info.containerInterface))
}
if _, err := infraprovider.Get().ExecExternalContainerCommand(container,
[]string{"sh", "-c", strings.Join(shellCmds, " && ")}); err != nil {
return nil, fmt.Errorf("failed to reassign IPs on container %s (network %s): %w", container.Name, networkName, err)
}
framework.Logf("Reassigned container %s (network %s) IPs to CUDN IPs: %v", container.Name, networkName, containerIPs)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

info.containerIPs is not updated after proxy mode IP reassignment, causing wrong IPs in FRR neighbor entries.

In proxy mode, createEVPNExternalContainer returns info.containerIPs containing Docker's randomly-assigned IPs. After the shell commands reassign the container interface to CUDN addresses, info.containerIPs is never updated. This causes:

  1. Lines 784-787 to create FRR neighbor entries with wrong IPs
  2. Caller to receive wrong IPs via returned info
🐛 Proposed fix: Update info.containerIPs after reassignment
 		if _, err := infraprovider.Get().ExecExternalContainerCommand(container,
 			[]string{"sh", "-c", strings.Join(shellCmds, " && ")}); err != nil {
 			return nil, fmt.Errorf("failed to reassign IPs on container %s (network %s): %w", container.Name, networkName, err)
 		}
+		info.containerIPs = containerIPs
 		framework.Logf("Reassigned container %s (network %s) IPs to CUDN IPs: %v", container.Name, networkName, containerIPs)
 	}
📝 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 useProxyDockerNetwork {
shellCmds := []string{
fmt.Sprintf("ip addr flush dev %s", info.containerInterface),
}
// CreateNetwork infers IP family from the subnets passed to it; with nil
// subnets it creates an IPv4-only network, which disables IPv6 on the
// interface. Enable it so we can add IPv6 CUDN addresses.
if ipFamilies.Has(utilnet.IPv6) {
shellCmds = append(shellCmds,
fmt.Sprintf("sysctl -w net.ipv6.conf.%s.disable_ipv6=0", info.containerInterface))
}
for i, subnet := range subnets {
_, ipNet, parseErr := net.ParseCIDR(subnet)
if parseErr != nil {
return nil, fmt.Errorf("failed to parse CUDN subnet %s: %w", subnet, parseErr)
}
prefixLen, _ := ipNet.Mask.Size()
addr := fmt.Sprintf("%s/%d", containerIPs[i], prefixLen)
shellCmds = append(shellCmds,
fmt.Sprintf("ip addr add %s dev %s", addr, info.containerInterface))
}
if _, err := infraprovider.Get().ExecExternalContainerCommand(container,
[]string{"sh", "-c", strings.Join(shellCmds, " && ")}); err != nil {
return nil, fmt.Errorf("failed to reassign IPs on container %s (network %s): %w", container.Name, networkName, err)
}
framework.Logf("Reassigned container %s (network %s) IPs to CUDN IPs: %v", container.Name, networkName, containerIPs)
}
if useProxyDockerNetwork {
shellCmds := []string{
fmt.Sprintf("ip addr flush dev %s", info.containerInterface),
}
// CreateNetwork infers IP family from the subnets passed to it; with nil
// subnets it creates an IPv4-only network, which disables IPv6 on the
// interface. Enable it so we can add IPv6 CUDN addresses.
if ipFamilies.Has(utilnet.IPv6) {
shellCmds = append(shellCmds,
fmt.Sprintf("sysctl -w net.ipv6.conf.%s.disable_ipv6=0", info.containerInterface))
}
for i, subnet := range subnets {
_, ipNet, parseErr := net.ParseCIDR(subnet)
if parseErr != nil {
return nil, fmt.Errorf("failed to parse CUDN subnet %s: %w", subnet, parseErr)
}
prefixLen, _ := ipNet.Mask.Size()
addr := fmt.Sprintf("%s/%d", containerIPs[i], prefixLen)
shellCmds = append(shellCmds,
fmt.Sprintf("ip addr add %s dev %s", addr, info.containerInterface))
}
if _, err := infraprovider.Get().ExecExternalContainerCommand(container,
[]string{"sh", "-c", strings.Join(shellCmds, " && ")}); err != nil {
return nil, fmt.Errorf("failed to reassign IPs on container %s (network %s): %w", container.Name, networkName, err)
}
info.containerIPs = containerIPs
framework.Logf("Reassigned container %s (network %s) IPs to CUDN IPs: %v", container.Name, networkName, containerIPs)
}
🤖 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 `@test/e2e/evpn.go` around lines 744 - 771, The info.containerIPs field is not
updated after the IP reassignment shell commands are executed, causing the
returned info object to contain outdated Docker-assigned IPs instead of the new
CUDN IPs. After the ExecExternalContainerCommand call succeeds in the
useProxyDockerNetwork block, update info.containerIPs by assigning the
containerIPs variable (which contains the correct CUDN IP addresses) to
info.containerIPs so that subsequent code and callers receive the correct IP
addresses.

@openshift-ci

openshift-ci Bot commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

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

Test name Commit Details Required Rerun command
ci/prow/e2e-metal-ipi-ovn-dualstack-bgp ecf4816 link true /test e2e-metal-ipi-ovn-dualstack-bgp
ci/prow/e2e-aws-ovn-shared-to-local-gateway-mode-migration ecf4816 link true /test e2e-aws-ovn-shared-to-local-gateway-mode-migration
ci/prow/e2e-aws-ovn-upgrade-local-gateway ecf4816 link true /test e2e-aws-ovn-upgrade-local-gateway
ci/prow/e2e-aws-ovn-fdp-qe ecf4816 link true /test e2e-aws-ovn-fdp-qe
ci/prow/e2e-gcp-ovn-techpreview ecf4816 link true /test e2e-gcp-ovn-techpreview
ci/prow/e2e-aws-ovn-local-to-shared-gateway-mode-migration ecf4816 link true /test e2e-aws-ovn-local-to-shared-gateway-mode-migration
ci/prow/e2e-metal-ipi-ovn-dualstack-bgp-local-gw ecf4816 link true /test e2e-metal-ipi-ovn-dualstack-bgp-local-gw
ci/prow/5.0-upgrade-from-stable-4.22-e2e-aws-ovn-upgrade ecf4816 link true /test 5.0-upgrade-from-stable-4.22-e2e-aws-ovn-upgrade
ci/prow/e2e-metal-ipi-ovn-dualstack ecf4816 link true /test e2e-metal-ipi-ovn-dualstack
ci/prow/e2e-aws-ovn-rhcos10-techpreview ecf4816 link false /test e2e-aws-ovn-rhcos10-techpreview
ci/prow/e2e-aws-ovn-hypershift ecf4816 link true /test e2e-aws-ovn-hypershift

Full PR test history. Your PR dashboard.

Details

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

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant