1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
package main
import (
"slices"
"github.com/lxc/incus/v6/internal/server/cluster"
"github.com/lxc/incus/v6/internal/server/db"
"github.com/lxc/incus/v6/internal/server/state"
"github.com/lxc/incus/v6/shared/logger"
)
var networkOVNChassis *bool
// networkUpdateOVNChassis gets called on heartbeats to check if OVN needs reconfiguring.
func networkUpdateOVNChassis(s *state.State, heartbeatData *cluster.APIHeartbeat, localAddress string) error {
// Check if we have at least one active OVN chassis.
hasOVNChassis := false
localOVNChassis := false
for _, n := range heartbeatData.Members {
if slices.Contains(n.Roles, db.ClusterRoleOVNChassis) {
if n.Address == localAddress {
localOVNChassis = true
}
hasOVNChassis = true
}
}
runChassis := !hasOVNChassis || localOVNChassis
if networkOVNChassis != nil && *networkOVNChassis != runChassis {
// Detected that the local OVN chassis setup may be incorrect, restarting.
err := networkRestartOVN(s)
if err != nil {
logger.Error("Error restarting OVN networks", logger.Ctx{"err": err})
}
}
networkOVNChassis = &runChassis
return nil
}
|