Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
c0ec554
Add OVN provider lifecycle skeleton
msinhore Apr 22, 2026
86ba819
OVN plugin: fix SSL cert enforcement and minor cleanups
msinhore Apr 22, 2026
a726815
OVN plugin: add real Northbound client backed by ODL OVSDB library
msinhore Apr 25, 2026
839af0e
OVN plugin: health-check Northbound endpoint at addOvnProvider
msinhore Apr 25, 2026
bd8ce97
OVN plugin: create logical switches and persist system VM bootstrap
msinhore Apr 27, 2026
818cf6d
OVN plugin: expose provider in UI and configuration
msinhore Apr 27, 2026
2e8c8a6
OVN plugin: bind VM NICs to logical switches via OVSDB LSPs
msinhore Apr 28, 2026
5d46852
OVN plugin: serve DHCPv4 from OVN itself via DHCP_Options
msinhore Apr 28, 2026
7aea0b5
OVN plugin: provision per-network L3 router with source NAT
msinhore Apr 28, 2026
661f659
OVN plugin: implement StaticNat via dnat_and_snat with Gateway_Chassi…
msinhore Apr 28, 2026
21619f3
OVN plugin: enforce ingress firewall rules via OVN ACL on the public LS
msinhore Apr 28, 2026
1f7c306
OVN plugin: detach NAT rows from Logical_Router.nat before deleting them
msinhore Apr 28, 2026
ea3ecc4
OVN plugin: add no-router network offerings
msinhore Apr 28, 2026
6e7c612
OVN plugin: implement PortForwarding and NetworkACL
msinhore Apr 28, 2026
6af5297
OVN plugin: announce SourceNat IPs via gARP and stop NAT-based PortFo…
msinhore Apr 28, 2026
ed63061
OVN plugin: implement PortForwarding via Load_Balancer
msinhore Apr 28, 2026
d762a14
OVN plugin: clean up per-IP artifacts on release and prune stale gate…
msinhore Apr 28, 2026
b5fb23f
OVN plugin: implement Load Balancer (L4) with health checks
msinhore Apr 28, 2026
7e31d3c
OVN plugin: reject LB rules placed on the network's SourceNat IP
msinhore Apr 29, 2026
e4cb8ac
OVN plugin: tighten Load_Balancer cleanup and protocol gate
msinhore Apr 29, 2026
43a9ea2
OVN plugin: introduce VPC-aware naming helpers (no functional change)
msinhore Apr 29, 2026
1eb672c
OVN plugin: implementVpc / shutdownVpc / updateVpcSourceNatIp
msinhore Apr 29, 2026
37cf8c6
OVN plugin: scope addStaticRoute idempotency by router
msinhore Apr 29, 2026
30604ae
OVN plugin: provision VPC tiers as LRPs on the shared VPC LR
msinhore Apr 29, 2026
b26e10c
OVN plugin: route StaticNat / PF / Firewall through VPC LR when appli…
msinhore Apr 29, 2026
c9758ae
OVN plugin: tag VPC NetworkACLs and scope ACL sweep to the target LS
msinhore Apr 29, 2026
801e5eb
OVN plugin: tag Public LB rows with VPC and scheme metadata
msinhore Apr 29, 2026
2c73d03
OVN plugin: support Internal Load Balancer scheme natively on the VPC LR
msinhore Apr 29, 2026
051b0a4
OVN plugin: complete the auto-seeded OVN offerings for fresh installs
msinhore Apr 29, 2026
b61ed36
OVN plugin: allow VM-initiated reply traffic past the public-IP firewall
msinhore Apr 29, 2026
991cdec
OVN plugin: fix NPE in addStaticRoute when LR already has routes
msinhore Apr 29, 2026
91a9caa
OVN plugin: drop unsolicited ICMP echo on public IPs with firewall rules
msinhore Apr 29, 2026
332a5aa
ui: surface OVN as a guest isolation method in the Add Zone wizard
msinhore Apr 29, 2026
273eb39
OVN plugin: implement VPC mesh peering
msinhore May 7, 2026
9d1b731
OVN plugin: fix peering LS per-zone provisioning and add arp_proxy fo…
msinhore May 8, 2026
aeb39f2
OVN plugin: add Firewall service to OVN VPC offering
msinhore May 8, 2026
5f68cbf
config-drive: check Dhcp/Dns on the network, not on ConfigDrive provider
msinhore May 8, 2026
2863dd7
OVN plugin: cross-zone VPC peering via OVN-IC + port-forward gARP fix
msinhore May 8, 2026
297c1ac
OVN plugin: preserve VPC peerings across restart-with-cleanup
msinhore May 8, 2026
f52af14
OVN plugin: skip remote AZ chassis when picking gateway-chassis
msinhore May 8, 2026
71cfd88
OVN plugin: drift-correct TS LRP networks on attach
msinhore May 8, 2026
5a42584
OVN plugin: pin same-AZ TS LRPs to a single primary gateway-chassis
msinhore May 8, 2026
178a5fd
OVN plugin: VPC peering enable/disable + AutogenView migration
msinhore May 9, 2026
88347e1
OVN plugin: peering UI ACL editor, column-cache fix, deep-dive deck
msinhore May 9, 2026
496116f
OVN plugin: Phase 1 QoS — per-NIC egress rate-limit on LSP
msinhore May 9, 2026
ec54048
ui: pt_BR translations for VPC Peering UI
msinhore May 9, 2026
ae123a9
OVN plugin: fix cross-zone VPC peering ACL update
msinhore May 9, 2026
34c63ab
Merge branch 'ovn-qos-bandwidth' into ovn-vpc-peering
msinhore May 9, 2026
95b06fd
OVN plugin: reject overlapping CIDRs at createVpcPeering time
msinhore May 9, 2026
d226f3d
Merge remote-tracking branch 'origin/ovn-vpc-peering' into ovn-vpc-pe…
msinhore May 11, 2026
a1f3bd3
Merge remote-tracking branch 'shapeblue/main' into ovn-plugin
msinhore May 11, 2026
43466e5
OVN plugin: fix referential-integrity error in addAclOnLs
msinhore May 15, 2026
700a462
OVN plugin: rename VPC Peering to Mesh Network
msinhore May 15, 2026
89059a8
OVN plugin: allow Isolated networks as mesh-network members
msinhore May 15, 2026
eb9625a
OVN plugin: UI fixes for mixed-mode mesh network picker
msinhore May 15, 2026
46c2a3d
OVN plugin: kind-agnostic columns + show non-Implemented isolated nets
msinhore May 15, 2026
5360eb4
OVN plugin: rename mesh-network members tab key vpc.peers -> mesh_peers
msinhore May 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
OVN plugin: health-check Northbound endpoint at addOvnProvider
addOvnProvider now opens a transient OVSDB connection during request
validation and rejects the registration with InvalidParameterValueException
if the endpoint is unreachable or does not advertise the OVN_Northbound
database. This catches typos, missing TLS material and routing problems
before persisting a broken provider row.

Also reorders the order-of-evaluation of two pre-existing tests that
constructed Mockito stubs inside thenReturn() arguments, and rewrites
AddOvnProviderCmdTest to set the service field by reflection — the
prior @InjectMocks-driven setup was ambiguous because BaseCmd has an
Object-typed _responseObject field that matched any of the @mock fields.
  • Loading branch information
msinhore committed Apr 25, 2026
commit 839af0e8b2433ab234cf01dfe2aa16dfdcd2a94e
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@ protected void validateProvider(AddOvnProviderCmd cmd) {
if (sslRequired && StringUtils.isAnyBlank(cmd.getCaCertPath(), cmd.getClientCertPath(), cmd.getClientPrivateKeyPath())) {
throw new InvalidParameterValueException("OVN SSL connections require CA certificate, client certificate, and client private key paths");
}
try {
ovnService.verifyNbConnection(cmd.getNbConnection(), cmd.getCaCertPath(), cmd.getClientCertPath(), cmd.getClientPrivateKeyPath());
} catch (CloudRuntimeException e) {
logger.warn("OVN NB health check failed for zone {}: {}", cmd.getZoneId(), e.getMessage());
throw new InvalidParameterValueException("OVN NB endpoint is unreachable: " + e.getMessage());
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,36 +27,35 @@
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;

import java.lang.reflect.Field;

public class AddOvnProviderCmdTest {
@Mock
private OvnProviderService ovnProviderService;
@Mock
private CallContext callContext;

private MockedStatic<CallContext> callContextMockedStatic;

@InjectMocks
private AddOvnProviderCmd cmd;

private AutoCloseable closeable;

@Before
public void setup() {
closeable = MockitoAnnotations.openMocks(this);
public void setup() throws Exception {
ovnProviderService = Mockito.mock(OvnProviderService.class);
callContext = Mockito.mock(CallContext.class);
callContextMockedStatic = Mockito.mockStatic(CallContext.class);
callContextMockedStatic.when(CallContext::current).thenReturn(callContext);

cmd = new AddOvnProviderCmd();
Field svc = AddOvnProviderCmd.class.getDeclaredField("ovnProviderService");
svc.setAccessible(true);
svc.set(cmd, ovnProviderService);
}

@After
public void tearDown() throws Exception {
callContextMockedStatic.close();
closeable.close();
if (callContextMockedStatic != null) {
callContextMockedStatic.close();
}
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public void testAddProviderPersistsProvider() throws Exception {
Mockito.when(ovnProviderDao.findByZoneId(ZONE_ID)).thenReturn(null);
Mockito.when(ovnService.isValidConnectionString(NB_CONNECTION)).thenReturn(true);
Mockito.when(ovnService.isValidConnectionString(SB_CONNECTION)).thenReturn(true);
Mockito.doNothing().when(ovnService).verifyNbConnection(Mockito.eq(NB_CONNECTION), Mockito.any(), Mockito.any(), Mockito.any());
Mockito.when(ovnProviderDao.persist(Mockito.any(OvnProviderVO.class))).thenAnswer(invocation -> invocation.getArgument(0));
transactionMockedStatic.when(() -> Transaction.execute(Mockito.<TransactionCallback<OvnProviderVO>>any())).thenAnswer(invocation -> {
TransactionCallback<OvnProviderVO> callback = invocation.getArgument(0);
Expand Down Expand Up @@ -126,9 +127,10 @@ public void testAddProviderRejectsInvalidNbConnection() throws Exception {
@Test
public void testListOvnProvidersWithZoneId() {
OvnProviderVO providerVO = Mockito.mock(OvnProviderVO.class);
Mockito.when(ovnProviderDao.findByZoneId(ZONE_ID)).thenReturn(providerVO);
Mockito.when(providerVO.getZoneId()).thenReturn(ZONE_ID);
Mockito.when(dataCenterDao.findById(ZONE_ID)).thenReturn(getZone());
Mockito.when(ovnProviderDao.findByZoneId(ZONE_ID)).thenReturn(providerVO);
DataCenterVO zone = getZone();
Mockito.when(dataCenterDao.findById(ZONE_ID)).thenReturn(zone);

List<BaseResponse> result = ovnProviderService.listOvnProviders(ZONE_ID);

Expand Down Expand Up @@ -174,7 +176,8 @@ public void testCreateOvnProviderResponse() {
Mockito.when(provider.getName()).thenReturn(NAME);
Mockito.when(provider.getNbConnection()).thenReturn(NB_CONNECTION);
Mockito.when(provider.getSbConnection()).thenReturn(SB_CONNECTION);
Mockito.when(dataCenterDao.findById(ZONE_ID)).thenReturn(getZone());
DataCenterVO zone = getZone();
Mockito.when(dataCenterDao.findById(ZONE_ID)).thenReturn(zone);

OvnProviderResponse response = ovnProviderService.createOvnProviderResponse(provider);

Expand Down