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

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) ===
This is to accommodate custom future custom volume backups that will go in `shared.VarPath("backups", "custom")` without conflict.
From 13cc075b6270508f205779751273641cf4f7157c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 16:05:50 +0100
Subject: [PATCH 1/9] lxd/backup: Adds WorkingDirPrefix constant

To link all variations that use temporary working directories in the codebase.

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup/backup.go | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/lxd/backup/backup.go b/lxd/backup/backup.go
index 5d20ac00f9..b4dd5736fa 100644
--- a/lxd/backup/backup.go
+++ b/lxd/backup/backup.go
@@ -17,6 +17,9 @@ import (
        "github.com/lxc/lxd/shared/api"
 )
 
+// WorkingDirPrefix is used when temporary working directories are needed.
+const WorkingDirPrefix = "lxd_backup_"
+
 // Instance represents the backup relevant subset of a LXD instance.
 // This is used rather than instance.Instance to avoid import loops.
 type Instance interface {

From fb9935e94507258e39680b6c78906da86c672781 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 16:06:47 +0100
Subject: [PATCH 2/9] lxd: backup.WorkingDirPrefix usage

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instances_post.go                       | 4 ++--
 lxd/storage/drivers/driver_btrfs_volumes.go | 2 +-
 lxd/storage/drivers/driver_zfs_volumes.go   | 2 +-
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/lxd/instances_post.go b/lxd/instances_post.go
index b3a83e89b8..cbe58a1bba 100644
--- a/lxd/instances_post.go
+++ b/lxd/instances_post.go
@@ -550,7 +550,7 @@ func createFromBackup(d *Daemon, project string, data 
io.Reader, pool string) re
        defer revert.Fail()
 
        // Create temporary file to store uploaded backup data.
-       backupFile, err := ioutil.TempFile(shared.VarPath("backups"), 
"lxd_backup_")
+       backupFile, err := ioutil.TempFile(shared.VarPath("backups"), 
fmt.Sprintf("%s_", backup.WorkingDirPrefix))
        if err != nil {
                return response.InternalError(err)
        }
@@ -575,7 +575,7 @@ func createFromBackup(d *Daemon, project string, data 
io.Reader, pool string) re
                decomArgs := append(decomArgs, backupFile.Name())
 
                // Create temporary file to store the decompressed tarball in.
-               tarFile, err := ioutil.TempFile(shared.VarPath("backups"), 
"lxd_backup_decompress_")
+               tarFile, err := ioutil.TempFile(shared.VarPath("backups"), 
fmt.Sprintf("%s_decompress_", backup.WorkingDirPrefix))
                if err != nil {
                        return response.InternalError(err)
                }
diff --git a/lxd/storage/drivers/driver_btrfs_volumes.go 
b/lxd/storage/drivers/driver_btrfs_volumes.go
index 222efcd031..ebe7dc5334 100644
--- a/lxd/storage/drivers/driver_btrfs_volumes.go
+++ b/lxd/storage/drivers/driver_btrfs_volumes.go
@@ -1029,7 +1029,7 @@ func (d *btrfs) BackupVolume(vol Volume, tarWriter 
*instancewriter.InstanceTarWr
 
                // Create temporary file to store output of btrfs send.
                backupsPath := shared.VarPath("backups")
-               tmpFile, err := ioutil.TempFile(backupsPath, "lxd_backup_btrfs")
+               tmpFile, err := ioutil.TempFile(backupsPath, 
fmt.Sprintf("%s_btrfs", backup.WorkingDirPrefix))
                if err != nil {
                        return errors.Wrapf(err, "Failed to open temporary file 
for BTRFS backup")
                }
diff --git a/lxd/storage/drivers/driver_zfs_volumes.go 
b/lxd/storage/drivers/driver_zfs_volumes.go
index 5c548061e0..5cae1d92d1 100644
--- a/lxd/storage/drivers/driver_zfs_volumes.go
+++ b/lxd/storage/drivers/driver_zfs_volumes.go
@@ -1390,7 +1390,7 @@ func (d *zfs) BackupVolume(vol Volume, tarWriter 
*instancewriter.InstanceTarWrit
 
                // Create temporary file to store output of ZFS send.
                backupsPath := shared.VarPath("backups")
-               tmpFile, err := ioutil.TempFile(backupsPath, "lxd_backup_zfs")
+               tmpFile, err := ioutil.TempFile(backupsPath, 
fmt.Sprintf("%s_zfs", backup.WorkingDirPrefix))
                if err != nil {
                        return errors.Wrapf(err, "Failed to open temporary file 
for ZFS backup")
                }

From c461d50b923bc6151fa926afc665aa5158eef9b0 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:25:42 +0100
Subject: [PATCH 3/9] lxd/backup: Updates backupCreate to store backups in
 backups/instances

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup.go | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/lxd/backup.go b/lxd/backup.go
index a938311e14..3014912073 100644
--- a/lxd/backup.go
+++ b/lxd/backup.go
@@ -83,7 +83,7 @@ func backupCreate(s *state.State, args db.InstanceBackup, 
sourceInst instance.In
        }
 
        // Create the target path if needed.
-       backupsPath := shared.VarPath("backups", 
project.Instance(sourceInst.Project(), sourceInst.Name()))
+       backupsPath := shared.VarPath("backups", "instances", 
project.Instance(sourceInst.Project(), sourceInst.Name()))
        if !shared.PathExists(backupsPath) {
                err := os.MkdirAll(backupsPath, 0700)
                if err != nil {
@@ -93,7 +93,7 @@ func backupCreate(s *state.State, args db.InstanceBackup, 
sourceInst instance.In
                revert.Add(func() { os.Remove(backupsPath) })
        }
 
-       target := shared.VarPath("backups", 
project.Instance(sourceInst.Project(), b.Name()))
+       target := shared.VarPath("backups", "instances", 
project.Instance(sourceInst.Project(), b.Name()))
 
        // Setup the tarball writer.
        logger.Debug("Opening backup tarball for writing", log.Ctx{"path": 
target})

From 61ea832674555527b831fee5986d4cd7e2f7a34c Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:26:34 +0100
Subject: [PATCH 4/9] lxd/backup: Updates Rename to support new backup location

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup/backup.go | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lxd/backup/backup.go b/lxd/backup/backup.go
index b4dd5736fa..5f924d3a6e 100644
--- a/lxd/backup/backup.go
+++ b/lxd/backup/backup.go
@@ -179,13 +179,13 @@ func (b *Backup) OptimizedStorage() bool {
        return b.optimizedStorage
 }
 
-// Rename renames a container backup
+// Rename renames an instance backup.
 func (b *Backup) Rename(newName string) error {
-       oldBackupPath := shared.VarPath("backups", 
project.Instance(b.instance.Project(), b.name))
-       newBackupPath := shared.VarPath("backups", 
project.Instance(b.instance.Project(), newName))
+       oldBackupPath := shared.VarPath("backups", "instances", 
project.Instance(b.instance.Project(), b.name))
+       newBackupPath := shared.VarPath("backups", "instances", 
project.Instance(b.instance.Project(), newName))
 
-       // Create the new backup path
-       backupsPath := shared.VarPath("backups", 
project.Instance(b.instance.Project(), b.instance.Name()))
+       // Create the new backup path.
+       backupsPath := shared.VarPath("backups", "instances", 
project.Instance(b.instance.Project(), b.instance.Name()))
        if !shared.PathExists(backupsPath) {
                err := os.MkdirAll(backupsPath, 0700)
                if err != nil {

From 620630dc7d346357cd84cff922636a615668e359 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:26:52 +0100
Subject: [PATCH 5/9] lxd/backup: Rename comment ending

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup/backup.go | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lxd/backup/backup.go b/lxd/backup/backup.go
index 5f924d3a6e..ef1c0d18d4 100644
--- a/lxd/backup/backup.go
+++ b/lxd/backup/backup.go
@@ -193,13 +193,13 @@ func (b *Backup) Rename(newName string) error {
                }
        }
 
-       // Rename the backup directory
+       // Rename the backup directory.
        err := os.Rename(oldBackupPath, newBackupPath)
        if err != nil {
                return err
        }
 
-       // Check if we can remove the container directory
+       // Check if we can remove the instance directory.
        empty, _ := shared.PathIsEmpty(backupsPath)
        if empty {
                err := os.Remove(backupsPath)
@@ -208,7 +208,7 @@ func (b *Backup) Rename(newName string) error {
                }
        }
 
-       // Rename the database record
+       // Rename the database record.
        err = b.state.Cluster.RenameInstanceBackup(b.name, newName)
        if err != nil {
                return err

From 5d740dcd5ecc254d92742d2245586f9e6f9619be Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:27:14 +0100
Subject: [PATCH 6/9] lxd/backup: Updates DoBackupDelete to handle new backup
 location

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup/backup.go | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lxd/backup/backup.go b/lxd/backup/backup.go
index ef1c0d18d4..2147d717c8 100644
--- a/lxd/backup/backup.go
+++ b/lxd/backup/backup.go
@@ -235,10 +235,10 @@ func (b *Backup) Render() *api.InstanceBackup {
 }
 
 // DoBackupDelete deletes a backup.
-func DoBackupDelete(s *state.State, projectName, backupName, containerName 
string) error {
-       backupPath := shared.VarPath("backups", project.Instance(projectName, 
backupName))
+func DoBackupDelete(s *state.State, projectName, backupName, instanceName 
string) error {
+       backupPath := shared.VarPath("backups", "instances", 
project.Instance(projectName, backupName))
 
-       // Delete the on-disk data
+       // Delete the on-disk data.
        if shared.PathExists(backupPath) {
                err := os.RemoveAll(backupPath)
                if err != nil {
@@ -246,8 +246,8 @@ func DoBackupDelete(s *state.State, projectName, 
backupName, containerName strin
                }
        }
 
-       // Check if we can remove the container directory
-       backupsPath := shared.VarPath("backups", project.Instance(projectName, 
containerName))
+       // Check if we can remove the instance directory.
+       backupsPath := shared.VarPath("backups", "instances", 
project.Instance(projectName, instanceName))
        empty, _ := shared.PathIsEmpty(backupsPath)
        if empty {
                err := os.Remove(backupsPath)

From 5b483afe3786f6abc0a8dd4c71283341c8cac7f9 Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:27:28 +0100
Subject: [PATCH 7/9] lxd/backup: DoBackupDelete comment ending

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/backup/backup.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/backup/backup.go b/lxd/backup/backup.go
index 2147d717c8..d20b2a7b3d 100644
--- a/lxd/backup/backup.go
+++ b/lxd/backup/backup.go
@@ -256,7 +256,7 @@ func DoBackupDelete(s *state.State, projectName, 
backupName, instanceName string
                }
        }
 
-       // Remove the database record
+       // Remove the database record.
        err := s.Cluster.DeleteInstanceBackup(backupName)
        if err != nil {
                return err

From f7610f06f044e0c090010f534974ba266f90bfea Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:27:43 +0100
Subject: [PATCH 8/9] lxd/instance/backup: Updates containerBackupExportGet to
 support new backup location

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/instance_backup.go | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lxd/instance_backup.go b/lxd/instance_backup.go
index f4fd540316..4f9dfd8011 100644
--- a/lxd/instance_backup.go
+++ b/lxd/instance_backup.go
@@ -351,7 +351,7 @@ func containerBackupExportGet(d *Daemon, r *http.Request) 
response.Response {
        }
 
        ent := response.FileResponseEntry{
-               Path: shared.VarPath("backups", project.Instance(proj, 
backup.Name())),
+               Path: shared.VarPath("backups", "instances", 
project.Instance(proj, backup.Name())),
        }
 
        return response.FileResponse(r, []response.FileResponseEntry{ent}, nil, 
false)

From 68ca95c7cb50a3267286a4e02b7c7893791e2b0d Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parr...@canonical.com>
Date: Fri, 18 Sep 2020 15:55:39 +0100
Subject: [PATCH 9/9] lxd/patches: Adds patchMoveBackupsInstances to move
 backups into backups/instances dir

Signed-off-by: Thomas Parrott <thomas.parr...@canonical.com>
---
 lxd/patches.go | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/lxd/patches.go b/lxd/patches.go
index a5d849721f..2ac752323e 100644
--- a/lxd/patches.go
+++ b/lxd/patches.go
@@ -99,6 +99,7 @@ var patches = []patch{
        {name: "storage_lvm_skipactivation", stage: patchPostDaemonStorage, 
run: patchGenericStorage},
        {name: "clustering_drop_database_role", stage: patchPostDaemonStorage, 
run: patchClusteringDropDatabaseRole},
        {name: "network_clear_bridge_volatile_hwaddr", stage: 
patchPostDaemonStorage, run: patchNetworkCearBridgeVolatileHwaddr},
+       {name: "move_backups_instances", stage: patchPostDaemonStorage, run: 
patchMoveBackupsInstances},
 }
 
 type patch struct {
@@ -162,6 +163,42 @@ func patchesApply(d *Daemon, stage patchStage) error {
 }
 
 // Patches begin here
+
+// Moves backups from shared.VarPath("backups") to shared.VarPath("backups", 
"instances").
+func patchMoveBackupsInstances(name string, d *Daemon) error {
+       if !shared.PathExists(shared.VarPath("backups")) {
+               return nil // Nothing to do, no backups directory.
+       }
+
+       backupsPath := shared.VarPath("backups", "instances")
+
+       err := os.MkdirAll(backupsPath, 0700)
+       if err != nil {
+               return errors.Wrapf(err, "Failed creating instances backup 
directory %q", backupsPath)
+       }
+
+       backups, err := ioutil.ReadDir(shared.VarPath("backups"))
+       if err != nil {
+               return errors.Wrapf(err, "Failed listing existing backup 
directory %q", shared.VarPath("backups"))
+       }
+
+       for _, backup := range backups {
+               if backup.Name() == "instances" || 
strings.HasPrefix(backup.Name(), "lxd_backup_") {
+                       continue // Don't try and move our new instances 
directory or temporary directories.
+               }
+
+               oldPath := shared.VarPath("backups", backup.Name())
+               newPath := filepath.Join(backupsPath, backup.Name())
+               logger.Debugf("Moving backup from %q to %q", oldPath, newPath)
+               err = os.Rename(oldPath, newPath)
+               if err != nil {
+                       return errors.Wrapf(err, "Failed moving backup from %q 
to %q", oldPath, newPath)
+               }
+       }
+
+       return nil
+}
+
 func patchNetworkPIDFiles(name string, d *Daemon) error {
        networks, err := ioutil.ReadDir(shared.VarPath("networks"))
        if err != nil {
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to