Skip to content

Commit 62c6407

Browse files
committed
internal/server: allow creation of OVN network with no uplink
Closes: #1529 Signed-off-by: Winicius Silva <[email protected]>
1 parent 65ae9b1 commit 62c6407

File tree

1 file changed

+68
-57
lines changed

1 file changed

+68
-57
lines changed

internal/server/network/driver_ovn.go

Lines changed: 68 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,12 @@ func (n *ovn) Info() Info {
134134
}
135135

136136
func (n *ovn) State() (*api.NetworkState, error) {
137+
// Check if uplink exists
138+
_, err := n.ovnnb.GetLogicalRouter(context.TODO(), n.getRouterName())
139+
if err != nil && err == networkOVN.ErrNotFound {
140+
return nil, nil
141+
}
142+
137143
var addresses []api.NetworkStateAddress
138144
IPv4Net, err := ParseIPCIDRToNet(n.config["ipv4.address"])
139145
if err == nil {
@@ -2162,6 +2168,10 @@ func (n *ovn) setup(update bool) error {
21622168
return fmt.Errorf("Failed parsing router's internal port IPv6 Net: %w", err)
21632169
}
21642170

2171+
if (n.config["network"] != "none") && (routerIntPortIPv4 == nil || routerIntPortIPv6 == nil) {
2172+
return fmt.Errorf("The bridge addresses must be provided if has uplink network")
2173+
}
2174+
21652175
// Create chassis group.
21662176
err = n.ovnnb.CreateChassisGroup(context.TODO(), n.getChassisGroupName(), update)
21672177
if err != nil {
@@ -2172,16 +2182,17 @@ func (n *ovn) setup(update bool) error {
21722182
revert.Add(func() { _ = n.ovnnb.DeleteChassisGroup(context.TODO(), n.getChassisGroupName()) })
21732183
}
21742184

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-
}
2185+
if n.config["network"] != "none" {
2186+
// Create logical router.
2187+
err = n.ovnnb.CreateLogicalRouter(context.TODO(), n.getRouterName(), update)
2188+
if err != nil {
2189+
return fmt.Errorf("Failed adding router: %w", err)
2190+
}
21802191

2181-
if !update {
2182-
revert.Add(func() { _ = n.ovnnb.DeleteLogicalRouter(context.TODO(), n.getRouterName()) })
2192+
if !update {
2193+
revert.Add(func() { _ = n.ovnnb.DeleteLogicalRouter(context.TODO(), n.getRouterName()) })
2194+
}
21832195
}
2184-
21852196
// Configure logical router.
21862197

21872198
// Generate external router port IPs (in CIDR format).
@@ -2401,10 +2412,6 @@ func (n *ovn) setup(update bool) error {
24012412
intSubnets = append(intSubnets, *routerIntPortIPv6Net)
24022413
}
24032414

2404-
if len(intRouterIPs) <= 0 {
2405-
return fmt.Errorf("No internal IPs defined for network router")
2406-
}
2407-
24082415
// Create internal logical switch if not updating.
24092416
err = n.ovnnb.CreateLogicalSwitch(context.TODO(), n.getIntSwitchName(), update)
24102417
if err != nil {
@@ -2551,22 +2558,24 @@ func (n *ovn) setup(update bool) error {
25512558
})
25522559
}
25532560

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-
}
2559-
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-
}
2561+
if n.config["network"] != "none" {
2562+
// Apply router security policy.
2563+
err = n.logicalRouterPolicySetup(n.ovnnb)
2564+
if err != nil {
2565+
return fmt.Errorf("Failed applying router security policy: %w", err)
2566+
}
2567+
fmt.Printf("entrei aqui linha 2575")
2568+
// Create internal router port.
2569+
err = n.ovnnb.CreateLogicalRouterPort(context.TODO(), n.getRouterName(), n.getRouterIntPortName(), routerMAC, bridgeMTU, intRouterIPs, "", update)
2570+
if err != nil {
2571+
return fmt.Errorf("Failed adding internal router port: %w", err)
2572+
}
25652573

2566-
if !update {
2567-
revert.Add(func() {
2568-
_ = n.ovnnb.DeleteLogicalRouterPort(context.TODO(), n.getRouterName(), n.getRouterIntPortName())
2569-
})
2574+
if !update {
2575+
revert.Add(func() {
2576+
_ = n.ovnnb.DeleteLogicalRouterPort(context.TODO(), n.getRouterName(), n.getRouterIntPortName())
2577+
})
2578+
}
25702579
}
25712580

25722581
// Configure DHCP option sets.
@@ -2658,40 +2667,42 @@ func (n *ovn) setup(update bool) error {
26582667
}
26592668
}
26602669

2661-
// Set IPv6 router advertisement settings.
2662-
if routerIntPortIPv6Net != nil {
2663-
adressMode := networkOVN.OVNIPv6AddressModeSLAAC
2664-
if dhcpV6Subnet != nil {
2665-
adressMode = networkOVN.OVNIPv6AddressModeDHCPStateless
2666-
if util.IsTrue(n.config["ipv6.dhcp.stateful"]) {
2667-
adressMode = networkOVN.OVNIPv6AddressModeDHCPStateful
2670+
if n.config["network"] != "none" {
2671+
// Set IPv6 router advertisement settings.
2672+
if routerIntPortIPv6Net != nil {
2673+
adressMode := networkOVN.OVNIPv6AddressModeSLAAC
2674+
if dhcpV6Subnet != nil {
2675+
adressMode = networkOVN.OVNIPv6AddressModeDHCPStateless
2676+
if util.IsTrue(n.config["ipv6.dhcp.stateful"]) {
2677+
adressMode = networkOVN.OVNIPv6AddressModeDHCPStateful
2678+
}
26682679
}
2669-
}
26702680

2671-
var recursiveDNSServer net.IP
2672-
if uplinkNet != nil && len(uplinkNet.dnsIPv6) > 0 {
2673-
recursiveDNSServer = uplinkNet.dnsIPv6[0] // OVN only supports 1 RA DNS server.
2674-
}
2681+
var recursiveDNSServer net.IP
2682+
if uplinkNet != nil && len(uplinkNet.dnsIPv6) > 0 {
2683+
recursiveDNSServer = uplinkNet.dnsIPv6[0] // OVN only supports 1 RA DNS server.
2684+
}
26752685

2676-
err = n.ovnnb.UpdateLogicalRouterPort(context.TODO(), n.getRouterIntPortName(), &networkOVN.OVNIPv6RAOpts{
2677-
AddressMode: adressMode,
2678-
SendPeriodic: true,
2679-
DNSSearchList: n.getDNSSearchList(),
2680-
RecursiveDNSServer: recursiveDNSServer,
2681-
MTU: bridgeMTU,
2686+
err = n.ovnnb.UpdateLogicalRouterPort(context.TODO(), n.getRouterIntPortName(), &networkOVN.OVNIPv6RAOpts{
2687+
AddressMode: adressMode,
2688+
SendPeriodic: true,
2689+
DNSSearchList: n.getDNSSearchList(),
2690+
RecursiveDNSServer: recursiveDNSServer,
2691+
MTU: bridgeMTU,
26822692

2683-
// Keep these low until we support DNS search domains via DHCPv4, as otherwise RA DNSSL
2684-
// won't take effect until advert after DHCPv4 has run on instance.
2685-
MinInterval: time.Duration(time.Second * 30),
2686-
MaxInterval: time.Duration(time.Minute * 1),
2687-
})
2688-
if err != nil {
2689-
return fmt.Errorf("Failed setting internal router port IPv6 advertisement settings: %w", err)
2690-
}
2691-
} else {
2692-
err = n.ovnnb.UpdateLogicalRouterPort(context.TODO(), n.getRouterIntPortName(), &networkOVN.OVNIPv6RAOpts{})
2693-
if err != nil {
2694-
return fmt.Errorf("Failed removing internal router port IPv6 advertisement settings: %w", err)
2693+
// Keep these low until we support DNS search domains via DHCPv4, as otherwise RA DNSSL
2694+
// won't take effect until advert after DHCPv4 has run on instance.
2695+
MinInterval: time.Duration(time.Second * 30),
2696+
MaxInterval: time.Duration(time.Minute * 1),
2697+
})
2698+
if err != nil {
2699+
return fmt.Errorf("Failed setting internal router port IPv6 advertisement settings: %w", err)
2700+
}
2701+
} else {
2702+
err = n.ovnnb.UpdateLogicalRouterPort(context.TODO(), n.getRouterIntPortName(), &networkOVN.OVNIPv6RAOpts{})
2703+
if err != nil {
2704+
return fmt.Errorf("Failed removing internal router port IPv6 advertisement settings: %w", err)
2705+
}
26952706
}
26962707
}
26972708

0 commit comments

Comments
 (0)