diff --git a/cmd/incusd/api_cluster.go b/cmd/incusd/api_cluster.go index 7cf50f63cff..465acb3a3e2 100644 --- a/cmd/incusd/api_cluster.go +++ b/cmd/incusd/api_cluster.go @@ -3282,6 +3282,9 @@ func evacuateClusterMember(s *state.State, gateway *cluster.Gateway, r *http.Req return err } + // Stop networks after evacuation. + networkShutdown(s) + revert.Success() return nil } @@ -3427,6 +3430,12 @@ func restoreClusterMember(d *Daemon, r *http.Request) response.Response { metadata := make(map[string]any) + // Restart the networks. + err = networkStartup(d.State()) + if err != nil { + return err + } + // Restart the local instances. for _, inst := range localInstances { // Don't start instances which were stopped by the user. diff --git a/cmd/incusd/daemon.go b/cmd/incusd/daemon.go index e6ac9ba3532..13ae28a593d 100644 --- a/cmd/incusd/daemon.go +++ b/cmd/incusd/daemon.go @@ -1462,10 +1462,13 @@ func (d *Daemon) init() error { } // Setup the networks. - logger.Infof("Initializing networks") - err = networkStartup(d.State()) - if err != nil { - return err + if !d.db.Cluster.LocalNodeIsEvacuated() { + logger.Infof("Initializing networks") + + err = networkStartup(d.State()) + if err != nil { + return err + } } // Setup tertiary listeners that may use managed network addresses and must be started after networks. diff --git a/internal/server/network/ovn/ovn_nb_actions.go b/internal/server/network/ovn/ovn_nb_actions.go index 3de586f3cae..40415b02f18 100644 --- a/internal/server/network/ovn/ovn_nb_actions.go +++ b/internal/server/network/ovn/ovn_nb_actions.go @@ -182,7 +182,6 @@ type OVNRouterPeering struct { TargetRouterRoutes []net.IPNet } - // CreateLogicalRouter adds a named logical router. // If mayExist is true, then an existing resource of the same name is not treated as an error. func (o *NB) CreateLogicalRouter(ctx context.Context, routerName OVNRouter, mayExist bool) error {