From 8c4eb62f62dcda2336076a07c2374b3ea37a199f Mon Sep 17 00:00:00 2001 From: shama7g Date: Sat, 3 May 2025 22:55:55 +0000 Subject: [PATCH] added necessasry changes for parent= none --- cmd/incusd/networks.go | 5 +++++ internal/server/network/driver_ovn.go | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/cmd/incusd/networks.go b/cmd/incusd/networks.go index 52bfd90d3fb..eea05350552 100644 --- a/cmd/incusd/networks.go +++ b/cmd/incusd/networks.go @@ -459,6 +459,11 @@ func networksPost(d *Daemon, r *http.Request) response.Response { // A targetNode was specified, let's just define the node's network without actually creating it. // Check that only NodeSpecificNetworkConfig keys are specified. for key := range req.Config { + // Special-case: allow "parent=none". Used to indicate that this node should not act as a gateway chassis. + if key == "parent" && req.Config[key] == "none" { + continue + } + if !slices.Contains(db.NodeSpecificNetworkConfig, key) { return response.BadRequest(fmt.Errorf("Config key %q may not be used as member-specific key", key)) } diff --git a/internal/server/network/driver_ovn.go b/internal/server/network/driver_ovn.go index 2d9bc7bb181..c1f9b6df0ae 100644 --- a/internal/server/network/driver_ovn.go +++ b/internal/server/network/driver_ovn.go @@ -3399,6 +3399,11 @@ func (n *ovn) Rename(newName string) error { // chassisEnabled checks the cluster config to see if this particular // member should act as an OVN chassis. func (n *ovn) chassisEnabled(ctx context.Context, tx *db.ClusterTx) (bool, error) { + // If parent is "none", this network is standalone and should not act as a chassis. + if n.config["parent"] == "none" { + return false, nil + } + // Get the member info. memberID := tx.GetNodeID() members, err := tx.GetNodes(ctx) @@ -3446,6 +3451,13 @@ func (n *ovn) Start() error { reverter.Add(func() { n.setUnavailable() }) + // Skip full start logic if parent=none. + if n.config["parent"] == "none" { + n.logger.Info("Skipping OVN Start due to parent=none", logger.Ctx{"project": n.project, "name": n.name}) + n.setAvailable() + return nil + } + // Check that uplink network is available. if n.config["network"] != "" && n.config["network"] != "none" && !IsAvailable(api.ProjectDefaultName, n.config["network"]) { return fmt.Errorf("Uplink network %q is unavailable", n.config["network"])