[lxc-devel] [lxd/master] Extend checks for `activateifneeded`

monstermunchkin on Github lxc-bot at linuxcontainers.org
Fri Apr 3 07:33:03 UTC 2020


A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 319 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20200403/201000ad/attachment.bin>
-------------- next part --------------
From cf637d79802f2a63df211faa77121377a330fe8b Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Fri, 3 Apr 2020 08:47:39 +0200
Subject: [PATCH 1/4] lxd/main_activateifneeded: s/container/instance/

This replaces the string "container" with "instance".

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/main_activateifneeded.go | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/lxd/main_activateifneeded.go b/lxd/main_activateifneeded.go
index 99331ead84..f1be7d5f2c 100644
--- a/lxd/main_activateifneeded.go
+++ b/lxd/main_activateifneeded.go
@@ -33,8 +33,8 @@ func (c *cmdActivateifneeded) Command() *cobra.Command {
 	cmd.Long = `Description:
   Check if LXD should be started
 
-  This command will check if LXD has any auto-started containers,
-  containers which were running prior to LXD's last shutdown or if it's
+  This command will check if LXD has any auto-started instances,
+  instances which were running prior to LXD's last shutdown or if it's
   configured to listen on the network address.
 
   If at least one of those is true, then a connection will be attempted to the
@@ -86,13 +86,13 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 		return err
 	}
 
-	// Load the idmap for unprivileged containers
+	// Load the idmap for unprivileged instances
 	d.os.IdmapSet, err = idmap.DefaultIdmapSet("", "")
 	if err != nil {
 		return err
 	}
 
-	// Look for auto-started or previously started containers
+	// Look for auto-started or previously started instances
 	path = d.os.GlobalDatabasePath()
 	if !shared.PathExists(path) {
 		path = d.os.LegacyGlobalDatabasePath()
@@ -111,19 +111,19 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 		return err
 	}
 
-	var containers []db.Instance
+	var instances []db.Instance
 	err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
 		filter := db.InstanceFilter{Type: instancetype.Container}
 		var err error
-		containers, err = tx.InstanceList(filter)
+		instances, err = tx.InstanceList(filter)
 		return err
 	})
 	if err != nil {
 		return err
 	}
 
-	for _, container := range containers {
-		c, err := instance.LoadByProjectAndName(d.State(), container.Project, container.Name)
+	for _, inst := range instances {
+		c, err := instance.LoadByProjectAndName(d.State(), inst.Project, inst.Name)
 		if err != nil {
 			sqldb.Close()
 			return err
@@ -135,14 +135,14 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 
 		if c.IsRunning() {
 			sqldb.Close()
-			logger.Debugf("Daemon has running containers, activating...")
+			logger.Debugf("Daemon has running instances, activating...")
 			_, err := lxd.ConnectLXDUnix("", nil)
 			return err
 		}
 
 		if lastState == "RUNNING" || lastState == "Running" || shared.IsTrue(autoStart) {
 			sqldb.Close()
-			logger.Debugf("Daemon has auto-started containers, activating...")
+			logger.Debugf("Daemon has auto-started instances, activating...")
 			_, err := lxd.ConnectLXDUnix("", nil)
 			return err
 		}

From b0239a80518090c65b152174e2192e0997ff175f Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Fri, 3 Apr 2020 08:54:32 +0200
Subject: [PATCH 2/4] lxd/main_activateifneeded: Retrieve all instances

Instead of retrieving only containers in default project, this includes
all instance types (containers and VMs) in all projects.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/main_activateifneeded.go | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/lxd/main_activateifneeded.go b/lxd/main_activateifneeded.go
index f1be7d5f2c..cd4618d8b8 100644
--- a/lxd/main_activateifneeded.go
+++ b/lxd/main_activateifneeded.go
@@ -11,7 +11,6 @@ import (
 	lxd "github.com/lxc/lxd/client"
 	"github.com/lxc/lxd/lxd/db"
 	"github.com/lxc/lxd/lxd/instance"
-	"github.com/lxc/lxd/lxd/instance/instancetype"
 	"github.com/lxc/lxd/lxd/node"
 	"github.com/lxc/lxd/shared"
 	"github.com/lxc/lxd/shared/idmap"
@@ -113,10 +112,22 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 
 	var instances []db.Instance
 	err = d.cluster.Transaction(func(tx *db.ClusterTx) error {
-		filter := db.InstanceFilter{Type: instancetype.Container}
-		var err error
-		instances, err = tx.InstanceList(filter)
-		return err
+		// Get all projects
+		projects, err := tx.ProjectList(db.ProjectFilter{})
+		if err != nil {
+			return err
+		}
+
+		// Get instances of all projects
+		for _, project := range projects {
+			filter := db.InstanceFilter{Project: project.Name}
+			instances, err = tx.InstanceList(filter)
+			if err != nil {
+				return err
+			}
+		}
+
+		return nil
 	})
 	if err != nil {
 		return err

From 00f7c6dc2bf2c308d7fe2c0bfb7cf98541ca13db Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Fri, 3 Apr 2020 09:27:15 +0200
Subject: [PATCH 3/4] lxd/main_activateifneeded: Check for scheduled instance
 snapshots

This checks for scheduled instance snapshots, and activates LXD if
enabled.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/main_activateifneeded.go | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lxd/main_activateifneeded.go b/lxd/main_activateifneeded.go
index cd4618d8b8..64e4a395f4 100644
--- a/lxd/main_activateifneeded.go
+++ b/lxd/main_activateifneeded.go
@@ -157,6 +157,16 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 			_, err := lxd.ConnectLXDUnix("", nil)
 			return err
 		}
+
+		// Check for scheduled instance snapshots
+		snapshotsSchedule := config["snapshots.schedule"]
+
+		if snapshotsSchedule != "" {
+			sqldb.Close()
+			logger.Debugf("Daemon has scheduled instance snapshots, activating...")
+			_, err := lxd.ConnectLXDUnix("", nil)
+			return err
+		}
 	}
 
 	sqldb.Close()

From 27cf3d63b56c771cba1d29c9850821fff8c6f307 Mon Sep 17 00:00:00 2001
From: Thomas Hipp <thomas.hipp at canonical.com>
Date: Fri, 3 Apr 2020 09:28:09 +0200
Subject: [PATCH 4/4] lxd/main_activateifneeded: Check for scheduled volume
 snapshots

This checks for scheduled volume snapshots, and activates LXD if
enabled.

Signed-off-by: Thomas Hipp <thomas.hipp at canonical.com>
---
 lxd/main_activateifneeded.go | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lxd/main_activateifneeded.go b/lxd/main_activateifneeded.go
index 64e4a395f4..b64bde5e14 100644
--- a/lxd/main_activateifneeded.go
+++ b/lxd/main_activateifneeded.go
@@ -169,6 +169,22 @@ func (c *cmdActivateifneeded) Run(cmd *cobra.Command, args []string) error {
 		}
 	}
 
+	// Check for scheduled volume snapshots
+	volumes, err := d.cluster.StoragePoolVolumesGetAllByType(db.StoragePoolVolumeTypeCustom)
+	if err != nil {
+		return err
+	}
+
+	for _, vol := range volumes {
+		snapshotsSchedule := vol.Config["snapshots.schedule"]
+		if snapshotsSchedule != "" {
+			sqldb.Close()
+			logger.Debugf("Daemon has scheduled volume snapshots, activating...")
+			_, err := lxd.ConnectLXDUnix("", nil)
+			return err
+		}
+	}
+
 	sqldb.Close()
 	logger.Debugf("No need to start the daemon now")
 	return nil


More information about the lxc-devel mailing list