The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6508

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From e7a0a723c0806a94e2d8dd81d4267c45ff248ab5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 26 Nov 2019 00:45:26 -0500
Subject: [PATCH 1/2] lxd/networks: Merge clsuter config on create
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #6418

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/networks.go | 40 +++++++++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/lxd/networks.go b/lxd/networks.go
index 9505777088..0c5aa824cb 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -168,11 +168,6 @@ func networksPost(d *Daemon, r *http.Request) 
response.Response {
                return resp
        }
 
-       err = networkFillConfig(&req)
-       if err != nil {
-               return response.SmartError(err)
-       }
-
        // Check if we're clustered
        count, err := cluster.Count(d.State())
        if err != nil {
@@ -184,9 +179,15 @@ func networksPost(d *Daemon, r *http.Request) 
response.Response {
                if err != nil {
                        return response.SmartError(err)
                }
+
                return resp
        }
 
+       err = networkFillConfig(&req)
+       if err != nil {
+               return response.SmartError(err)
+       }
+
        // No targetNode was specified and we're either a single-node
        // cluster or not clustered at all, so create the storage
        // pool immediately.
@@ -221,24 +222,37 @@ func networksPostCluster(d *Daemon, req api.NetworksPost) 
error {
                }
        }
 
+       // Merge the current config.
+       networkID, dbNetwork, err := d.cluster.NetworkGet(req.Name)
+       if err != nil {
+               return err
+       }
+
+       for k, v := range dbNetwork.Config {
+               _, ok := req.Config[k]
+               if !ok {
+                       req.Config[k] = v
+               }
+       }
+
+       // Add default values.
+       err = networkFillConfig(&req)
+       if err != nil {
+               return err
+       }
+
        // Check that the network is properly defined, fetch the node-specific
        // configs and insert the global config.
        var configs map[string]map[string]string
        var nodeName string
-       err := d.cluster.Transaction(func(tx *db.ClusterTx) error {
-               // Check that the network was defined at all.
-               networkID, err := tx.NetworkID(req.Name)
-               if err != nil {
-                       return err
-               }
-
+       err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
                // Fetch the node-specific configs.
                configs, err = tx.NetworkNodeConfigs(networkID)
                if err != nil {
                        return err
                }
 
-               // Take note of the name of this node
+               // Take note of the name of this node.
                nodeName, err = tx.NodeName()
                if err != nil {
                        return err

From 26098589643d83c72bb915a06da9603d913eab06 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Tue, 26 Nov 2019 01:30:19 -0500
Subject: [PATCH 2/2] lxd/networks: Forward config updates
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #6418

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxd/networks.go | 32 ++++++++++++++++++++++++--------
 1 file changed, 24 insertions(+), 8 deletions(-)

diff --git a/lxd/networks.go b/lxd/networks.go
index 0c5aa824cb..0f7d8c6d6c 100644
--- a/lxd/networks.go
+++ b/lxd/networks.go
@@ -627,7 +627,7 @@ func networkPut(d *Daemon, r *http.Request) 
response.Response {
                return response.BadRequest(err)
        }
 
-       return doNetworkUpdate(d, name, dbInfo.Config, req)
+       return doNetworkUpdate(d, name, dbInfo.Config, req, 
isClusterNotification(r))
 }
 
 func networkPatch(d *Daemon, r *http.Request) response.Response {
@@ -678,10 +678,10 @@ func networkPatch(d *Daemon, r *http.Request) 
response.Response {
                }
        }
 
-       return doNetworkUpdate(d, name, dbInfo.Config, req)
+       return doNetworkUpdate(d, name, dbInfo.Config, req, 
isClusterNotification(r))
 }
 
-func doNetworkUpdate(d *Daemon, name string, oldConfig map[string]string, req 
api.NetworkPut) response.Response {
+func doNetworkUpdate(d *Daemon, name string, oldConfig map[string]string, req 
api.NetworkPut, notify bool) response.Response {
        // Validate the configuration
        err := networkValidateConfig(name, req.Config)
        if err != nil {
@@ -701,7 +701,7 @@ func doNetworkUpdate(d *Daemon, name string, oldConfig 
map[string]string, req ap
                return response.NotFound(err)
        }
 
-       err = n.Update(req)
+       err = n.Update(req, notify)
        if err != nil {
                return response.SmartError(err)
        }
@@ -2136,7 +2136,7 @@ func (n *network) Stop() error {
        return nil
 }
 
-func (n *network) Update(newNetwork api.NetworkPut) error {
+func (n *network) Update(newNetwork api.NetworkPut, notify bool) error {
        err := networkFillAuto(newNetwork.Config)
        if err != nil {
                return err
@@ -2239,9 +2239,25 @@ func (n *network) Update(newNetwork api.NetworkPut) 
error {
        n.description = newNetwork.Description
 
        // Update the database
-       err = n.state.Cluster.NetworkUpdate(n.name, n.description, n.config)
-       if err != nil {
-               return err
+       if !notify {
+               // Notify all other nodes to update the network.
+               notifier, err := cluster.NewNotifier(n.state, 
n.state.Endpoints.NetworkCert(), cluster.NotifyAll)
+               if err != nil {
+                       return err
+               }
+
+               err = notifier(func(client lxd.InstanceServer) error {
+                       return client.UpdateNetwork(n.name, newNetwork, "")
+               })
+               if err != nil {
+                       return err
+               }
+
+               // Update the database.
+               err = n.state.Cluster.NetworkUpdate(n.name, n.description, 
n.config)
+               if err != nil {
+                       return err
+               }
        }
 
        // Restart the network
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to