[lxc-devel] [lxd/master] network: Only adding pseudo pending node records when in cluster in networksPost

tomponline on Github lxc-bot at linuxcontainers.org
Tue Sep 22 15:15:34 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 404 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200922/0ecc9abd/attachment.bin>
-------------- next part --------------
From 8db55cde37fa40df1b8dfb04329615a60018fd19 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Tue, 22 Sep 2020 16:14:30 +0100
Subject: [PATCH] lxd/network: Only adding pseudo pending node records when in
 cluster in networksPost

Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
 lxd/networks.go | 52 +++++++++++++++++++++++++------------------------
 1 file changed, 27 insertions(+), 25 deletions(-)

diff --git a/lxd/networks.go b/lxd/networks.go
index 960bc46b39..4e63f182de 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -229,31 +229,6 @@ func networksPost(d *Daemon, r *http.Request) response.Response {
 		}
 
 		return resp
-	} else if !netTypeInfo.NodeSpecificConfig && clientType != cluster.ClientTypeJoiner {
-		// Simulate adding pending node network config when the driver doesn't support per-node config.
-		revert.Add(func() {
-			d.cluster.DeleteNetwork(projectName, req.Name)
-		})
-
-		// Create pending entry for each node.
-		err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
-			nodes, err := tx.GetNodes()
-			if err != nil {
-				return err
-			}
-
-			for _, node := range nodes {
-				err = tx.CreatePendingNetwork(node.Name, projectName, req.Name, netType.DBType(), req.Config)
-				if err != nil {
-					return errors.Wrapf(err, "Failed creating pending network for node %q", node.Name)
-				}
-			}
-
-			return nil
-		})
-		if err != nil {
-			return response.SmartError(err)
-		}
 	}
 
 	// Check if we're clustered.
@@ -263,6 +238,33 @@ func networksPost(d *Daemon, r *http.Request) response.Response {
 	}
 
 	if count > 1 {
+		// Simulate adding pending node network config when the driver doesn't support per-node config.
+		if !netTypeInfo.NodeSpecificConfig && clientType != cluster.ClientTypeJoiner {
+			revert.Add(func() {
+				d.cluster.DeleteNetwork(projectName, req.Name)
+			})
+
+			// Create pending entry for each node.
+			err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
+				nodes, err := tx.GetNodes()
+				if err != nil {
+					return err
+				}
+
+				for _, node := range nodes {
+					err = tx.CreatePendingNetwork(node.Name, projectName, req.Name, netType.DBType(), req.Config)
+					if err != nil {
+						return errors.Wrapf(err, "Failed creating pending network for node %q", node.Name)
+					}
+				}
+
+				return nil
+			})
+			if err != nil {
+				return response.SmartError(err)
+			}
+		}
+
 		err = networksPostCluster(d, projectName, req, clientType, netType)
 		if err != nil {
 			return response.SmartError(err)


More information about the lxc-devel mailing list