[lxc-devel] [lxd/master] Fix some MAAS issues

stgraber on Github lxc-bot at linuxcontainers.org
Mon Jun 18 20:35:02 UTC 2018


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 301 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20180618/a044ef4b/attachment.bin>
-------------- next part --------------
From 31a1ba2337840f685bdf39480196887d4079dc58 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Mon, 18 Jun 2018 14:22:17 -0400
Subject: [PATCH 1/2] lxd/containers: Don't update MAAS for snapshots
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4661

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container_lxc.go | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 2f9b3bdb5..36028f461 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -446,11 +446,13 @@ func containerLXCCreate(s *state.State, args db.ContainerArgs) (container, error
 	}
 
 	// Update MAAS
-	err = c.maasUpdate(false)
-	if err != nil {
-		c.Delete()
-		logger.Error("Failed creating container", ctxMap)
-		return nil, err
+	if !c.IsSnapshot() {
+		err = c.maasUpdate(false)
+		if err != nil {
+			c.Delete()
+			logger.Error("Failed creating container", ctxMap)
+			return nil, err
+		}
 	}
 
 	// Update lease files
@@ -3398,9 +3400,11 @@ func (c *containerLXC) Rename(newName string) error {
 	c.cleanup()
 
 	// Rename the MAAS entry
-	err = c.maasRename(newName)
-	if err != nil {
-		return err
+	if !c.IsSnapshot() {
+		err = c.maasRename(newName)
+		if err != nil {
+			return err
+		}
 	}
 
 	// Rename the logging path
@@ -3982,7 +3986,7 @@ func (c *containerLXC) Update(args db.ContainerArgs, userRequested bool) error {
 		}
 	}
 
-	if updateMAAS {
+	if !c.IsSnapshot() && updateMAAS {
 		err = c.maasUpdate(true)
 		if err != nil {
 			return err

From 00655c6da0e6add54ce6a1c432358b8407569871 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber at ubuntu.com>
Date: Mon, 18 Jun 2018 16:33:20 -0400
Subject: [PATCH 2/2] lxd/maas: Allow starting with MAAS offline
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #4636

Signed-off-by: Stéphane Graber <stgraber at ubuntu.com>
---
 lxd/container_lxc.go | 34 +++++++++++++++++++++++++++++++---
 lxd/daemon.go        | 18 +++++++++++++-----
 2 files changed, 44 insertions(+), 8 deletions(-)

diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 36028f461..771e70451 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -25,6 +25,7 @@ import (
 	"gopkg.in/lxc/go-lxc.v2"
 	"gopkg.in/yaml.v2"
 
+	"github.com/lxc/lxd/lxd/cluster"
 	"github.com/lxc/lxd/lxd/db"
 	"github.com/lxc/lxd/lxd/db/query"
 	"github.com/lxc/lxd/lxd/maas"
@@ -8326,10 +8327,19 @@ func (c *containerLXC) maasConnected() bool {
 }
 
 func (c *containerLXC) maasUpdate(force bool) error {
-	if c.state.MAAS == nil {
+	maasURL, err := cluster.ConfigGetString(c.state.Cluster, "maas.api.url")
+	if err != nil {
+		return err
+	}
+
+	if maasURL == "" {
 		return nil
 	}
 
+	if c.state.MAAS == nil {
+		return fmt.Errorf("Can't perform the operation because MAAS is currently unavailable")
+	}
+
 	if !c.maasConnected() {
 		if force {
 			exists, err := c.state.MAAS.DefinedContainer(c.name)
@@ -8362,10 +8372,19 @@ func (c *containerLXC) maasUpdate(force bool) error {
 }
 
 func (c *containerLXC) maasRename(newName string) error {
-	if c.state.MAAS == nil {
+	maasURL, err := cluster.ConfigGetString(c.state.Cluster, "maas.api.url")
+	if err != nil {
+		return err
+	}
+
+	if maasURL == "" {
 		return nil
 	}
 
+	if c.state.MAAS == nil {
+		return fmt.Errorf("Can't perform the operation because MAAS is currently unavailable")
+	}
+
 	if !c.maasConnected() {
 		return nil
 	}
@@ -8383,10 +8402,19 @@ func (c *containerLXC) maasRename(newName string) error {
 }
 
 func (c *containerLXC) maasDelete() error {
-	if c.state.MAAS == nil {
+	maasURL, err := cluster.ConfigGetString(c.state.Cluster, "maas.api.url")
+	if err != nil {
+		return err
+	}
+
+	if maasURL == "" {
 		return nil
 	}
 
+	if c.state.MAAS == nil {
+		return fmt.Errorf("Can't perform the operation because MAAS is currently unavailable")
+	}
+
 	if !c.maasConnected() {
 		return nil
 	}
diff --git a/lxd/daemon.go b/lxd/daemon.go
index d1a30fcfb..fef03f24f 100644
--- a/lxd/daemon.go
+++ b/lxd/daemon.go
@@ -614,12 +614,20 @@ func (d *Daemon) init() error {
 
 		// Read the trusted certificates
 		readSavedClientCAList(d)
-	}
 
-	// Connect to MAAS
-	err = d.setupMAASController(maasAPIURL, maasAPIKey, maasMachine)
-	if err != nil {
-		return err
+		// Connect to MAAS
+		go func() {
+			for {
+				err = d.setupMAASController(maasAPIURL, maasAPIKey, maasMachine)
+				if err == nil {
+					logger.Info("Connected to MAAS controller")
+					break
+				}
+
+				logger.Warn("Unable to connect to MAAS, trying again in a minute", log.Ctx{"err": err})
+				time.Sleep(time.Minute)
+			}
+		}()
 	}
 
 	close(d.setupChan)


More information about the lxc-devel mailing list