@@ -2162,6 +2162,10 @@ func (n *ovn) setup(update bool) error {
2162
2162
return fmt .Errorf ("Failed parsing router's internal port IPv6 Net: %w" , err )
2163
2163
}
2164
2164
2165
+ if n .config ["network" ] != "none" && routerIntPortIPv4 == nil && routerIntPortIPv6 == nil {
2166
+ return fmt .Errorf ("IPv4 or IPv6 subnets must be specified on a non-isolated OVN network" )
2167
+ }
2168
+
2165
2169
// Create chassis group.
2166
2170
err = n .ovnnb .CreateChassisGroup (context .TODO (), n .getChassisGroupName (), update )
2167
2171
if err != nil {
@@ -2172,18 +2176,24 @@ func (n *ovn) setup(update bool) error {
2172
2176
revert .Add (func () { _ = n .ovnnb .DeleteChassisGroup (context .TODO (), n .getChassisGroupName ()) })
2173
2177
}
2174
2178
2175
- // Create logical router.
2176
- err = n .ovnnb .CreateLogicalRouter (context .TODO (), n .getRouterName (), update )
2177
- if err != nil {
2178
- return fmt .Errorf ("Failed adding router: %w" , err )
2179
- }
2179
+ // Configure logical router.
2180
+ if routerIntPortIPv4 != nil || routerIntPortIPv6 != nil {
2181
+ // Create logical router.
2182
+ err = n .ovnnb .CreateLogicalRouter (context .TODO (), n .getRouterName (), update )
2183
+ if err != nil {
2184
+ return fmt .Errorf ("Failed adding router: %w" , err )
2185
+ }
2180
2186
2181
- if ! update {
2182
- revert .Add (func () { _ = n .ovnnb .DeleteLogicalRouter (context .TODO (), n .getRouterName ()) })
2187
+ if ! update {
2188
+ revert .Add (func () { _ = n .ovnnb .DeleteLogicalRouter (context .TODO (), n .getRouterName ()) })
2189
+ }
2190
+ } else {
2191
+ err := n .ovnnb .DeleteLogicalRouter (context .TODO (), n .getRouterName ())
2192
+ if err != nil && err != networkOVN .ErrNotFound {
2193
+ return fmt .Errorf ("Failed deleting router: %w" , err )
2194
+ }
2183
2195
}
2184
2196
2185
- // Configure logical router.
2186
-
2187
2197
// Generate external router port IPs (in CIDR format).
2188
2198
extRouterIPs := []* net.IPNet {}
2189
2199
if routerExtPortIPv4Net != nil {
@@ -2401,10 +2411,6 @@ func (n *ovn) setup(update bool) error {
2401
2411
intSubnets = append (intSubnets , * routerIntPortIPv6Net )
2402
2412
}
2403
2413
2404
- if len (intRouterIPs ) <= 0 {
2405
- return fmt .Errorf ("No internal IPs defined for network router" )
2406
- }
2407
-
2408
2414
// Create internal logical switch if not updating.
2409
2415
err = n .ovnnb .CreateLogicalSwitch (context .TODO (), n .getIntSwitchName (), update )
2410
2416
if err != nil {
@@ -2551,22 +2557,29 @@ func (n *ovn) setup(update bool) error {
2551
2557
})
2552
2558
}
2553
2559
2554
- // Apply router security policy.
2555
- err = n .logicalRouterPolicySetup (n .ovnnb )
2556
- if err != nil {
2557
- return fmt .Errorf ("Failed applying router security policy: %w" , err )
2558
- }
2560
+ if routerIntPortIPv4 != nil || routerIntPortIPv6 != nil {
2561
+ // Apply router security policy.
2562
+ err = n .logicalRouterPolicySetup (n .ovnnb )
2563
+ if err != nil {
2564
+ return fmt .Errorf ("Failed applying router security policy: %w" , err )
2565
+ }
2559
2566
2560
- // Create internal router port.
2561
- err = n .ovnnb .CreateLogicalRouterPort (context .TODO (), n .getRouterName (), n .getRouterIntPortName (), routerMAC , bridgeMTU , intRouterIPs , "" , update )
2562
- if err != nil {
2563
- return fmt .Errorf ("Failed adding internal router port: %w" , err )
2564
- }
2567
+ // Create internal router port.
2568
+ err = n .ovnnb .CreateLogicalRouterPort (context .TODO (), n .getRouterName (), n .getRouterIntPortName (), routerMAC , bridgeMTU , intRouterIPs , "" , update )
2569
+ if err != nil {
2570
+ return fmt .Errorf ("Failed adding internal router port: %w" , err )
2571
+ }
2565
2572
2566
- if ! update {
2567
- revert .Add (func () {
2568
- _ = n .ovnnb .DeleteLogicalRouterPort (context .TODO (), n .getRouterName (), n .getRouterIntPortName ())
2569
- })
2573
+ if ! update {
2574
+ revert .Add (func () {
2575
+ _ = n .ovnnb .DeleteLogicalRouterPort (context .TODO (), n .getRouterName (), n .getRouterIntPortName ())
2576
+ })
2577
+ }
2578
+ } else {
2579
+ err := n .ovnnb .DeleteLogicalRouterPort (context .TODO (), n .getRouterName (), n .getRouterIntPortName ())
2580
+ if err != nil && err != ovs .ErrNotFound {
2581
+ return fmt .Errorf ("Failed deleting logical router port: %w" , err )
2582
+ }
2570
2583
}
2571
2584
2572
2585
// Configure DHCP option sets.
@@ -2690,26 +2703,33 @@ func (n *ovn) setup(update bool) error {
2690
2703
}
2691
2704
} else {
2692
2705
err = n .ovnnb .UpdateLogicalRouterPort (context .TODO (), n .getRouterIntPortName (), & networkOVN.OVNIPv6RAOpts {})
2693
- if err != nil {
2706
+ if err != nil && err != networkOVN . ErrNotFound {
2694
2707
return fmt .Errorf ("Failed removing internal router port IPv6 advertisement settings: %w" , err )
2695
2708
}
2696
2709
}
2697
2710
2698
2711
// Create internal switch port and link to router port.
2699
- err = n .ovnnb .CreateLogicalSwitchPort (context .TODO (), n .getIntSwitchName (), n .getIntSwitchRouterPortName (), nil , update )
2700
- if err != nil {
2701
- return fmt .Errorf ("Failed adding internal switch router port: %w" , err )
2702
- }
2712
+ if routerIntPortIPv4Net != nil || routerIntPortIPv6Net != nil {
2713
+ err = n .ovnnb .CreateLogicalSwitchPort (context .TODO (), n .getIntSwitchName (), n .getIntSwitchRouterPortName (), nil , update )
2714
+ if err != nil {
2715
+ return fmt .Errorf ("Failed adding internal switch router port: %w" , err )
2716
+ }
2703
2717
2704
- if ! update {
2705
- revert .Add (func () {
2706
- _ = n .ovnnb .DeleteLogicalSwitchPort (context .TODO (), n .getIntSwitchName (), n .getIntSwitchRouterPortName ())
2707
- })
2708
- }
2718
+ if ! update {
2719
+ revert .Add (func () {
2720
+ _ = n .ovnnb .DeleteLogicalSwitchPort (context .TODO (), n .getIntSwitchName (), n .getIntSwitchRouterPortName ())
2721
+ })
2722
+ }
2709
2723
2710
- err = n .ovnnb .UpdateLogicalSwitchPortLinkRouter (context .TODO (), n .getIntSwitchRouterPortName (), n .getRouterIntPortName ())
2711
- if err != nil {
2712
- return fmt .Errorf ("Failed linking internal router port to internal switch port: %w" , err )
2724
+ err = n .ovnnb .UpdateLogicalSwitchPortLinkRouter (context .TODO (), n .getIntSwitchRouterPortName (), n .getRouterIntPortName ())
2725
+ if err != nil {
2726
+ return fmt .Errorf ("Failed linking internal router port to internal switch port: %w" , err )
2727
+ }
2728
+ } else {
2729
+ err := n .ovnnb .DeleteLogicalSwitchPort (context .TODO (), n .getIntSwitchName (), n .getIntSwitchRouterPortName ())
2730
+ if err != nil && err != networkOVN .ErrNotFound {
2731
+ return fmt .Errorf ("Failed removing logical switch port: %w" , err )
2732
+ }
2713
2733
}
2714
2734
2715
2735
// Apply baseline ACL rules to internal logical switch.
0 commit comments