Skip to content

Commit 6e38032

Browse files
committed
[gateway] create createGWRouter function from GatewayInit
Signed-off-by: Nadia Pinaeva <[email protected]>
1 parent ab24f25 commit 6e38032

File tree

1 file changed

+33
-22
lines changed

1 file changed

+33
-22
lines changed

go-controller/pkg/ovn/gateway.go

Lines changed: 33 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -242,18 +242,7 @@ func (gw *GatewayManager) cleanupStalePodSNATs(nodeName string, nodeIPs []*net.I
242242
return nil
243243
}
244244

245-
// GatewayInit creates a gateway router for the local chassis.
246-
// enableGatewayMTU enables options:gateway_mtu for gateway routers.
247-
func (gw *GatewayManager) GatewayInit(
248-
nodeName string,
249-
clusterIPSubnet []*net.IPNet,
250-
hostSubnets []*net.IPNet,
251-
l3GatewayConfig *util.L3GatewayConfig,
252-
gwLRPJoinIPs, drLRPIfAddrs []*net.IPNet,
253-
externalIPs []net.IP,
254-
enableGatewayMTU bool,
255-
) error {
256-
245+
func (gw *GatewayManager) createGWRouter(l3GatewayConfig *util.L3GatewayConfig, gwLRPJoinIPs []*net.IPNet) (*nbdb.LogicalRouter, error) {
257246
// Create a gateway router.
258247
dynamicNeighRouters := "true"
259248
if config.OVNKubernetesFeature.EnableInterconnect {
@@ -313,10 +302,33 @@ func (gw *GatewayManager) GatewayInit(
313302
}
314303
}
315304

305+
err := libovsdbops.CreateOrUpdateLogicalRouter(gw.nbClient, &gwRouter, &gwRouter.Options,
306+
&gwRouter.ExternalIDs, &gwRouter.LoadBalancerGroup, &gwRouter.Copp)
307+
if err != nil {
308+
return nil, fmt.Errorf("failed to create logical router %+v: %v", gwRouter, err)
309+
}
310+
return &gwRouter, nil
311+
}
312+
313+
// GatewayInit creates a gateway router for the local chassis.
314+
// enableGatewayMTU enables options:gateway_mtu for gateway routers.
315+
func (gw *GatewayManager) GatewayInit(
316+
nodeName string,
317+
clusterIPSubnet []*net.IPNet,
318+
hostSubnets []*net.IPNet,
319+
l3GatewayConfig *util.L3GatewayConfig,
320+
gwLRPJoinIPs, drLRPIfAddrs []*net.IPNet,
321+
externalIPs []net.IP,
322+
enableGatewayMTU bool,
323+
) error {
324+
316325
// If l3gatewayAnnotation.IPAddresses changed, we need to update the perPodSNATs,
317326
// so let's save the old value before we update the router for later use
318327
var oldExtIPs []net.IP
319-
oldLogicalRouter, err := libovsdbops.GetLogicalRouter(gw.nbClient, &gwRouter)
328+
oldLogicalRouter, err := libovsdbops.GetLogicalRouter(gw.nbClient,
329+
&nbdb.LogicalRouter{
330+
Name: gw.gwRouterName,
331+
})
320332
if err != nil && !errors.Is(err, libovsdbclient.ErrNotFound) {
321333
return fmt.Errorf("failed in retrieving %s, error: %v", gw.gwRouterName, err)
322334
}
@@ -336,10 +348,9 @@ func (gw *GatewayManager) GatewayInit(
336348
}
337349
}
338350

339-
err = libovsdbops.CreateOrUpdateLogicalRouter(gw.nbClient, &gwRouter, &gwRouter.Options,
340-
&gwRouter.ExternalIDs, &gwRouter.LoadBalancerGroup, &gwRouter.Copp)
351+
gwRouter, err := gw.createGWRouter(l3GatewayConfig, gwLRPJoinIPs)
341352
if err != nil {
342-
return fmt.Errorf("failed to create logical router %+v: %v", gwRouter, err)
353+
return err
343354
}
344355

345356
gwSwitchPort := types.JoinSwitchToGWRouterPrefix + gw.gwRouterName
@@ -441,7 +452,7 @@ func (gw *GatewayManager) GatewayInit(
441452
}
442453
}
443454

444-
err = libovsdbops.CreateOrUpdateLogicalRouterPort(gw.nbClient, &gwRouter,
455+
err = libovsdbops.CreateOrUpdateLogicalRouterPort(gw.nbClient, gwRouter,
445456
&logicalRouterPort, nil, &logicalRouterPort.MAC, &logicalRouterPort.Networks,
446457
&logicalRouterPort.Options)
447458
if err != nil {
@@ -464,7 +475,7 @@ func (gw *GatewayManager) GatewayInit(
464475
// a better way to do it. Adding support for indirection in ModelClients
465476
// opModel (being able to operate on thins pointed to from another model)
466477
// would be a great way to simplify this.
467-
updatedGWRouter, err := libovsdbops.GetLogicalRouter(gw.nbClient, &gwRouter)
478+
updatedGWRouter, err := libovsdbops.GetLogicalRouter(gw.nbClient, gwRouter)
468479
if err != nil {
469480
return fmt.Errorf("unable to retrieve logical router %+v: %v", gwRouter, err)
470481
}
@@ -742,7 +753,7 @@ func (gw *GatewayManager) GatewayInit(
742753
}
743754

744755
if len(natsToUpdate) > 0 {
745-
err = libovsdbops.CreateOrUpdateNATs(gw.nbClient, &gwRouter, natsToUpdate...)
756+
err = libovsdbops.CreateOrUpdateNATs(gw.nbClient, gwRouter, natsToUpdate...)
746757
if err != nil {
747758
return fmt.Errorf("failed to update GW SNAT rule for pod on router %s error: %v", gw.gwRouterName, err)
748759
}
@@ -770,7 +781,7 @@ func (gw *GatewayManager) GatewayInit(
770781
nat := libovsdbops.BuildSNAT(&externalIP[0], joinIPNet, "", extIDs)
771782
joinNATs = append(joinNATs, nat)
772783
}
773-
err = libovsdbops.CreateOrUpdateNATs(gw.nbClient, &gwRouter, joinNATs...)
784+
err = libovsdbops.CreateOrUpdateNATs(gw.nbClient, gwRouter, joinNATs...)
774785
if err != nil {
775786
return fmt.Errorf("failed to create SNAT rule for join subnet on router %s error: %v", gw.gwRouterName, err)
776787
}
@@ -790,7 +801,7 @@ func (gw *GatewayManager) GatewayInit(
790801
nat = libovsdbops.BuildSNATWithMatch(&externalIP[0], entry, "", extIDs, gw.netInfo.GetNetworkScopedClusterSubnetSNATMatch(nodeName))
791802
nats = append(nats, nat)
792803
}
793-
err := libovsdbops.CreateOrUpdateNATs(gw.nbClient, &gwRouter, nats...)
804+
err := libovsdbops.CreateOrUpdateNATs(gw.nbClient, gwRouter, nats...)
794805
if err != nil {
795806
return fmt.Errorf("failed to update SNAT rule for pod on router %s error: %v", gw.gwRouterName, err)
796807
}
@@ -800,7 +811,7 @@ func (gw *GatewayManager) GatewayInit(
800811
nat = libovsdbops.BuildSNATWithMatch(nil, logicalSubnet, "", extIDs, gw.netInfo.GetNetworkScopedClusterSubnetSNATMatch(nodeName))
801812
nats = append(nats, nat)
802813
}
803-
err := libovsdbops.DeleteNATs(gw.nbClient, &gwRouter, nats...)
814+
err := libovsdbops.DeleteNATs(gw.nbClient, gwRouter, nats...)
804815
if err != nil {
805816
return fmt.Errorf("failed to delete GW SNAT rule for pod on router %s error: %v", gw.gwRouterName, err)
806817
}

0 commit comments

Comments
 (0)