[lxc-devel] [lxd/master] Instance Interface
tomponline on Github
lxc-bot at linuxcontainers.org
Mon Sep 16 12:03:16 UTC 2019
A non-text attachment was scrubbed...
Name: not available
Type: text/x-mailbox
Size: 646 bytes
Desc: not available
URL: <http://lists.linuxcontainers.org/pipermail/lxc-devel/attachments/20190916/c551c41c/attachment-0001.bin>
-------------- next part --------------
From e125cd950eb3d2b3356c7e7a80a1ca41228812ee Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Mon, 16 Sep 2019 12:49:26 +0100
Subject: [PATCH 1/3] lxd: Adds instance interface
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/instance_interface.go | 118 ++++++++++++++++++++++++++++++++++++++
1 file changed, 118 insertions(+)
create mode 100644 lxd/instance_interface.go
diff --git a/lxd/instance_interface.go b/lxd/instance_interface.go
new file mode 100644
index 0000000000..dcdc4c2198
--- /dev/null
+++ b/lxd/instance_interface.go
@@ -0,0 +1,118 @@
+package main
+
+import (
+ "io"
+ "os"
+ "os/exec"
+ "time"
+
+ "github.com/lxc/lxd/lxd/db"
+ "github.com/lxc/lxd/lxd/device"
+ "github.com/lxc/lxd/lxd/device/config"
+ "github.com/lxc/lxd/lxd/instance"
+ "github.com/lxc/lxd/lxd/state"
+ "github.com/lxc/lxd/shared/api"
+)
+
+// The Instance interface
+type Instance interface {
+ // Instance actions
+ Freeze() error
+ Shutdown(timeout time.Duration) error
+ Start(stateful bool) error
+ Stop(stateful bool) error
+ Unfreeze() error
+
+ IsPrivileged() bool
+
+ // Snapshots & migration & backups
+ Restore(source Instance, stateful bool) error
+ Snapshots() ([]Instance, error)
+ Backups() ([]backup, error)
+
+ // Config handling
+ Rename(newName string) error
+
+ // TODO rename db.ContainerArgs to db.InstanceArgs.
+ Update(newConfig db.ContainerArgs, userRequested bool) error
+
+ Delete() error
+ Export(w io.Writer, properties map[string]string) error
+
+ // Live configuration
+ CGroupGet(key string) (string, error)
+ CGroupSet(key string, value string) error
+ VolatileSet(changes map[string]string) error
+
+ // File handling
+ FileExists(path string) error
+ FilePull(srcpath string, dstpath string) (int64, int64, os.FileMode, string, []string, error)
+ FilePush(type_ string, srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error
+ FileRemove(path string) error
+
+ // Console - Allocate and run a console tty.
+ //
+ // terminal - Bidirectional file descriptor.
+ //
+ // This function will not return until the console has been exited by
+ // the user.
+ Console(terminal *os.File) *exec.Cmd
+ Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool, cwd string, uid uint32, gid uint32) (*exec.Cmd, int, int, error)
+
+ // Status
+ Render() (interface{}, interface{}, error)
+ RenderFull() (*api.InstanceFull, interface{}, error)
+ RenderState() (*api.InstanceState, error)
+ IsRunning() bool
+ IsFrozen() bool
+ IsEphemeral() bool
+ IsSnapshot() bool
+ IsStateful() bool
+
+ // Hooks
+ DeviceEventHandler(*device.RunConfig) error
+
+ // Properties
+ Id() int
+ Location() string
+ Project() string
+ Name() string
+ Type() instance.Type
+ Description() string
+ Architecture() int
+ CreationDate() time.Time
+ LastUsedDate() time.Time
+ ExpandedConfig() map[string]string
+ ExpandedDevices() config.Devices
+ LocalConfig() map[string]string
+ LocalDevices() config.Devices
+ Profiles() []string
+ InitPID() int
+ State() string
+ ExpiryDate() time.Time
+
+ // Paths
+ Path() string
+ RootfsPath() string
+ TemplatesPath() string
+ StatePath() string
+ LogFilePath() string
+ ConsoleBufferLogPath() string
+ LogPath() string
+ DevicesPath() string
+
+ // Storage
+ StoragePool() (string, error)
+
+ // Progress reporting
+
+ SetOperation(op *operation)
+
+ // FIXME: Those should be internal functions
+ // Needed for migration for now.
+ StorageStart() (bool, error)
+ StorageStop() (bool, error)
+ Storage() storage
+ TemplateApply(trigger string) error
+ DaemonState() *state.State
+}
From 31e214f05da08a32c92128ac2ed6b4815f0d655f Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Mon, 16 Sep 2019 12:50:50 +0100
Subject: [PATCH 2/3] lxd/container: Embeds the Instance interface into the
container interface
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/container.go | 107 ++---------------------------------------------
1 file changed, 4 insertions(+), 103 deletions(-)
diff --git a/lxd/container.go b/lxd/container.go
index dc97c5686c..e9b317c313 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -214,122 +214,23 @@ func containerValidDevices(state *state.State, cluster *db.Cluster, instanceName
// The container interface
type container interface {
- // Container actions
- Freeze() error
- Shutdown(timeout time.Duration) error
- Start(stateful bool) error
- Stop(stateful bool) error
- Unfreeze() error
-
- // Snapshots & migration & backups
- Restore(sourceContainer container, stateful bool) error
+ Instance
+
/* actionScript here is a script called action.sh in the stateDir, to
* be passed to CRIU as --action-script
*/
Migrate(args *CriuMigrationArgs) error
- Snapshots() ([]container, error)
- Backups() ([]backup, error)
-
- // Config handling
- Rename(newName string) error
- Update(newConfig db.ContainerArgs, userRequested bool) error
-
- Delete() error
- Export(w io.Writer, properties map[string]string) error
-
- // Live configuration
- CGroupGet(key string) (string, error)
- CGroupSet(key string, value string) error
- VolatileSet(changes map[string]string) error
-
- // File handling
- FileExists(path string) error
- FilePull(srcpath string, dstpath string) (int64, int64, os.FileMode, string, []string, error)
- FilePush(type_ string, srcpath string, dstpath string, uid int64, gid int64, mode int, write string) error
- FileRemove(path string) error
-
- // Console - Allocate and run a console tty.
- //
- // terminal - Bidirectional file descriptor.
- //
- // This function will not return until the console has been exited by
- // the user.
- Console(terminal *os.File) *exec.Cmd
+
ConsoleLog(opts lxc.ConsoleLogOptions) (string, error)
- /* Command execution:
- * 1. passing in false for wait
- * - equivalent to calling cmd.Run()
- * 2. passing in true for wait
- * - start the command and return its PID in the first return
- * argument and the PID of the attached process in the second
- * argument. It's the callers responsibility to wait on the
- * command. (Note. The returned PID of the attached process can not
- * be waited upon since it's a child of the lxd forkexec command
- * (the PID returned in the first return argument). It can however
- * be used to e.g. forward signals.)
- */
- Exec(command []string, env map[string]string, stdin *os.File, stdout *os.File, stderr *os.File, wait bool, cwd string, uid uint32, gid uint32) (*exec.Cmd, int, int, error)
// Status
- Render() (interface{}, interface{}, error)
- RenderFull() (*api.InstanceFull, interface{}, error)
- RenderState() (*api.InstanceState, error)
- IsPrivileged() bool
- IsRunning() bool
- IsFrozen() bool
- IsEphemeral() bool
- IsSnapshot() bool
- IsStateful() bool
IsNesting() bool
// Hooks
OnStart() error
OnStopNS(target string, netns string) error
OnStop(target string) error
- DeviceEventHandler(*device.RunConfig) error
-
- // Properties
- Id() int
- Location() string
- Project() string
- Name() string
- Type() instance.Type
- Description() string
- Architecture() int
- CreationDate() time.Time
- LastUsedDate() time.Time
- ExpandedConfig() map[string]string
- ExpandedDevices() config.Devices
- LocalConfig() map[string]string
- LocalDevices() config.Devices
- Profiles() []string
- InitPID() int
- State() string
- ExpiryDate() time.Time
-
- // Paths
- Path() string
- RootfsPath() string
- TemplatesPath() string
- StatePath() string
- LogFilePath() string
- ConsoleBufferLogPath() string
- LogPath() string
- DevicesPath() string
-
- // Storage
- StoragePool() (string, error)
-
- // Progress reporting
- SetOperation(op *operation)
-
- // FIXME: Those should be internal functions
- // Needed for migration for now.
- StorageStart() (bool, error)
- StorageStop() (bool, error)
- Storage() storage
- TemplateApply(trigger string) error
- DaemonState() *state.State
+
InsertSeccompUnixDevice(prefix string, m config.Device, pid int) error
CurrentIdmap() (*idmap.IdmapSet, error)
From 836276715d0d3d5b64d841aa53211b410d4871fd Mon Sep 17 00:00:00 2001
From: Thomas Parrott <thomas.parrott at canonical.com>
Date: Mon, 16 Sep 2019 12:58:17 +0100
Subject: [PATCH 3/3] lxd: Migrates storage references to container interface
to instance interface
Signed-off-by: Thomas Parrott <thomas.parrott at canonical.com>
---
lxd/container.go | 12 ++++----
lxd/container_lxc.go | 13 ++++++---
lxd/migrate_container.go | 6 ++--
lxd/storage.go | 36 +++++++++++------------
lxd/storage_btrfs.go | 48 +++++++++++++++----------------
lxd/storage_ceph.go | 41 +++++++++++++--------------
lxd/storage_ceph_utils.go | 8 ++----
lxd/storage_cephfs.go | 38 ++++++++++++-------------
lxd/storage_dir.go | 44 ++++++++++++++--------------
lxd/storage_lvm.go | 40 +++++++++++++-------------
lxd/storage_lvm_utils.go | 12 ++++----
lxd/storage_migration.go | 8 +++---
lxd/storage_migration_btrfs.go | 4 +--
lxd/storage_mock.go | 50 ++++++++++++--------------------
lxd/storage_zfs.go | 52 +++++++++++++++++-----------------
15 files changed, 200 insertions(+), 212 deletions(-)
diff --git a/lxd/container.go b/lxd/container.go
index e9b317c313..ecae6c8ce4 100644
--- a/lxd/container.go
+++ b/lxd/container.go
@@ -463,7 +463,7 @@ func containerCreateAsCopy(s *state.State, args db.ContainerArgs, sourceContaine
}
csList := []*container{}
- var snapshots []container
+ var snapshots []Instance
if !containerOnly {
if refresh {
@@ -1133,7 +1133,7 @@ func containerLoadAllInternal(cts []db.Instance, s *state.State) ([]container, e
return containers, nil
}
-func containerCompareSnapshots(source container, target container) ([]container, []container, error) {
+func containerCompareSnapshots(source Instance, target container) ([]Instance, []Instance, error) {
// Get the source snapshots
sourceSnapshots, err := source.Snapshots()
if err != nil {
@@ -1150,8 +1150,8 @@ func containerCompareSnapshots(source container, target container) ([]container,
sourceSnapshotsTime := map[string]time.Time{}
targetSnapshotsTime := map[string]time.Time{}
- toDelete := []container{}
- toSync := []container{}
+ toDelete := []Instance{}
+ toSync := []Instance{}
for _, snap := range sourceSnapshots {
_, snapName, _ := shared.ContainerGetParentAndSnapshotName(snap.Name())
@@ -1336,7 +1336,7 @@ func pruneExpiredContainerSnapshotsTask(d *Daemon) (task.Func, task.Schedule) {
}
// Figure out which need snapshotting (if any)
- expiredSnapshots := []container{}
+ expiredSnapshots := []Instance{}
for _, c := range allContainers {
snapshots, err := c.Snapshots()
if err != nil {
@@ -1395,7 +1395,7 @@ func pruneExpiredContainerSnapshotsTask(d *Daemon) (task.Func, task.Schedule) {
return f, schedule
}
-func pruneExpiredContainerSnapshots(ctx context.Context, d *Daemon, snapshots []container) error {
+func pruneExpiredContainerSnapshots(ctx context.Context, d *Daemon, snapshots []Instance) error {
// Find snapshots to delete
for _, snapshot := range snapshots {
err := snapshot.Delete()
diff --git a/lxd/container_lxc.go b/lxd/container_lxc.go
index 140b735cd6..a93d3b6504 100644
--- a/lxd/container_lxc.go
+++ b/lxd/container_lxc.go
@@ -3369,11 +3369,11 @@ func (c *containerLXC) RenderState() (*api.InstanceState, error) {
return &status, nil
}
-func (c *containerLXC) Snapshots() ([]container, error) {
+func (c *containerLXC) Snapshots() ([]Instance, error) {
var snaps []db.Instance
if c.IsSnapshot() {
- return []container{}, nil
+ return []Instance{}, nil
}
// Get all the snapshots
@@ -3396,7 +3396,12 @@ func (c *containerLXC) Snapshots() ([]container, error) {
return nil, err
}
- return containers, nil
+ instances := make([]Instance, len(containers))
+ for k, v := range containers {
+ instances[k] = Instance(v)
+ }
+
+ return instances, nil
}
func (c *containerLXC) Backups() ([]backup, error) {
@@ -3420,7 +3425,7 @@ func (c *containerLXC) Backups() ([]backup, error) {
return backups, nil
}
-func (c *containerLXC) Restore(sourceContainer container, stateful bool) error {
+func (c *containerLXC) Restore(sourceContainer Instance, stateful bool) error {
var ctxMap log.Ctx
// Initialize storage interface for the container.
diff --git a/lxd/migrate_container.go b/lxd/migrate_container.go
index 850d761e63..188612b98e 100644
--- a/lxd/migrate_container.go
+++ b/lxd/migrate_container.go
@@ -77,7 +77,7 @@ fi
return err
}
-func snapshotToProtobuf(c container) *migration.Snapshot {
+func snapshotToProtobuf(c Instance) *migration.Snapshot {
config := []*migration.Config{}
for k, v := range c.LocalConfig() {
kCopy := string(k)
@@ -1137,12 +1137,12 @@ func (s *migrationSourceWs) ConnectContainerTarget(target api.InstancePostTarget
return s.ConnectTarget(target.Certificate, target.Operation, target.Websockets)
}
-func migrationCompareSnapshots(sourceSnapshots []*migration.Snapshot, targetSnapshots []container) ([]*migration.Snapshot, []container) {
+func migrationCompareSnapshots(sourceSnapshots []*migration.Snapshot, targetSnapshots []Instance) ([]*migration.Snapshot, []Instance) {
// Compare source and target
sourceSnapshotsTime := map[string]int64{}
targetSnapshotsTime := map[string]int64{}
- toDelete := []container{}
+ toDelete := []Instance{}
toSync := []*migration.Snapshot{}
for _, snap := range sourceSnapshots {
diff --git a/lxd/storage.go b/lxd/storage.go
index 266216c127..9db3c4f91b 100644
--- a/lxd/storage.go
+++ b/lxd/storage.go
@@ -189,32 +189,32 @@ type storage interface {
// Functions dealing with container storage volumes.
// ContainerCreate creates an empty container (no rootfs/metadata.yaml)
- ContainerCreate(container container) error
+ ContainerCreate(container Instance) error
// ContainerCreateFromImage creates a container from a image.
- ContainerCreateFromImage(c container, fingerprint string, tracker *ioprogress.ProgressTracker) error
- ContainerDelete(c container) error
- ContainerCopy(target container, source container, containerOnly bool) error
- ContainerRefresh(target container, source container, snapshots []container) error
- ContainerMount(c container) (bool, error)
- ContainerUmount(c container, path string) (bool, error)
- ContainerRename(container container, newName string) error
- ContainerRestore(container container, sourceContainer container) error
- ContainerGetUsage(container container) (int64, error)
+ ContainerCreateFromImage(c Instance, fingerprint string, tracker *ioprogress.ProgressTracker) error
+ ContainerDelete(c Instance) error
+ ContainerCopy(target Instance, source Instance, containerOnly bool) error
+ ContainerRefresh(target Instance, source Instance, snapshots []Instance) error
+ ContainerMount(c Instance) (bool, error)
+ ContainerUmount(c Instance, path string) (bool, error)
+ ContainerRename(container Instance, newName string) error
+ ContainerRestore(container Instance, sourceContainer Instance) error
+ ContainerGetUsage(container Instance) (int64, error)
GetContainerPoolInfo() (int64, string, string)
- ContainerStorageReady(container container) bool
+ ContainerStorageReady(container Instance) bool
- ContainerSnapshotCreate(target container, source container) error
- ContainerSnapshotDelete(c container) error
- ContainerSnapshotRename(c container, newName string) error
- ContainerSnapshotStart(c container) (bool, error)
- ContainerSnapshotStop(c container) (bool, error)
+ ContainerSnapshotCreate(target Instance, source Instance) error
+ ContainerSnapshotDelete(c Instance) error
+ ContainerSnapshotRename(c Instance, newName string) error
+ ContainerSnapshotStart(c Instance) (bool, error)
+ ContainerSnapshotStop(c Instance) (bool, error)
- ContainerBackupCreate(backup backup, sourceContainer container) error
+ ContainerBackupCreate(backup backup, sourceContainer Instance) error
ContainerBackupLoad(info backupInfo, data io.ReadSeeker, tarArgs []string) error
// For use in migrating snapshots.
- ContainerSnapshotCreateEmpty(c container) error
+ ContainerSnapshotCreateEmpty(c Instance) error
// Functions dealing with image storage volumes.
ImageCreate(fingerprint string, tracker *ioprogress.ProgressTracker) error
diff --git a/lxd/storage_btrfs.go b/lxd/storage_btrfs.go
index 7aad51d7fb..7d93d29d80 100644
--- a/lxd/storage_btrfs.go
+++ b/lxd/storage_btrfs.go
@@ -800,7 +800,7 @@ func (s *storageBtrfs) StoragePoolVolumeRename(newName string) error {
}
// Functions dealing with container storage.
-func (s *storageBtrfs) ContainerStorageReady(container container) bool {
+func (s *storageBtrfs) ContainerStorageReady(container Instance) bool {
containerMntPoint := driver.GetContainerMountPoint(container.Project(), s.pool.Name, container.Name())
return isBtrfsSubVolume(containerMntPoint)
}
@@ -845,7 +845,7 @@ func (s *storageBtrfs) doContainerCreate(projectName, name string, privileged bo
return nil
}
-func (s *storageBtrfs) ContainerCreate(container container) error {
+func (s *storageBtrfs) ContainerCreate(container Instance) error {
err := s.doContainerCreate(container.Project(), container.Name(), container.IsPrivileged())
if err != nil {
return err
@@ -855,7 +855,7 @@ func (s *storageBtrfs) ContainerCreate(container container) error {
}
// And this function is why I started hating on btrfs...
-func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageBtrfs) ContainerCreateFromImage(container Instance, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating BTRFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
source := s.pool.Config["source"]
@@ -938,7 +938,7 @@ func (s *storageBtrfs) ContainerCreateFromImage(container container, fingerprint
return nil
}
-func (s *storageBtrfs) ContainerDelete(container container) error {
+func (s *storageBtrfs) ContainerDelete(container Instance) error {
logger.Debugf("Deleting BTRFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
// The storage pool needs to be mounted.
@@ -985,7 +985,7 @@ func (s *storageBtrfs) ContainerDelete(container container) error {
return nil
}
-func (s *storageBtrfs) copyContainer(target container, source container) error {
+func (s *storageBtrfs) copyContainer(target Instance, source Instance) error {
sourceContainerSubvolumeName := driver.GetContainerMountPoint(source.Project(), s.pool.Name, source.Name())
if source.IsSnapshot() {
sourceContainerSubvolumeName = driver.GetSnapshotMountPoint(source.Project(), s.pool.Name, source.Name())
@@ -1050,7 +1050,7 @@ func (s *storageBtrfs) copySnapshot(target container, source container) error {
return nil
}
-func (s *storageBtrfs) doCrossPoolContainerCopy(target container, source container, containerOnly bool, refresh bool, refreshSnapshots []container) error {
+func (s *storageBtrfs) doCrossPoolContainerCopy(target Instance, source Instance, containerOnly bool, refresh bool, refreshSnapshots []Instance) error {
sourcePool, err := source.StoragePool()
if err != nil {
return err
@@ -1075,7 +1075,7 @@ func (s *storageBtrfs) doCrossPoolContainerCopy(target container, source contain
return err
}
- var snapshots []container
+ var snapshots []Instance
if refresh {
snapshots = refreshSnapshots
@@ -1122,7 +1122,7 @@ func (s *storageBtrfs) doCrossPoolContainerCopy(target container, source contain
return nil
}
-func (s *storageBtrfs) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageBtrfs) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
logger.Debugf("Copying BTRFS container storage %s to %s", source.Name(), target.Name())
// The storage pool needs to be mounted.
@@ -1188,7 +1188,7 @@ func (s *storageBtrfs) ContainerCopy(target container, source container, contain
return nil
}
-func (s *storageBtrfs) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageBtrfs) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
logger.Debugf("Refreshing BTRFS container storage for %s from %s", target.Name(), source.Name())
// The storage pool needs to be mounted.
@@ -1208,7 +1208,7 @@ func (s *storageBtrfs) ContainerRefresh(target container, source container, snap
return s.doCrossPoolContainerCopy(target, source, len(snapshots) == 0, true, snapshots)
}
-func (s *storageBtrfs) ContainerMount(c container) (bool, error) {
+func (s *storageBtrfs) ContainerMount(c Instance) (bool, error) {
logger.Debugf("Mounting BTRFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
// The storage pool must be mounted.
@@ -1221,11 +1221,11 @@ func (s *storageBtrfs) ContainerMount(c container) (bool, error) {
return true, nil
}
-func (s *storageBtrfs) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageBtrfs) ContainerUmount(c Instance, path string) (bool, error) {
return true, nil
}
-func (s *storageBtrfs) ContainerRename(container container, newName string) error {
+func (s *storageBtrfs) ContainerRename(container Instance, newName string) error {
logger.Debugf("Renaming BTRFS storage volume for container \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
// The storage pool must be mounted.
@@ -1274,7 +1274,7 @@ func (s *storageBtrfs) ContainerRename(container container, newName string) erro
return nil
}
-func (s *storageBtrfs) ContainerRestore(container container, sourceContainer container) error {
+func (s *storageBtrfs) ContainerRestore(container Instance, sourceContainer Instance) error {
logger.Debugf("Restoring BTRFS storage volume for container \"%s\" from %s to %s", s.volume.Name, sourceContainer.Name(), container.Name())
// The storage pool must be mounted.
@@ -1359,7 +1359,7 @@ func (s *storageBtrfs) ContainerRestore(container container, sourceContainer con
return failure
}
-func (s *storageBtrfs) ContainerGetUsage(container container) (int64, error) {
+func (s *storageBtrfs) ContainerGetUsage(container Instance) (int64, error) {
return s.btrfsPoolVolumeQGroupUsage(container.Path())
}
@@ -1412,7 +1412,7 @@ func (s *storageBtrfs) doContainerSnapshotCreate(projectName string, targetName
return nil
}
-func (s *storageBtrfs) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageBtrfs) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
err := s.doContainerSnapshotCreate(sourceContainer.Project(), snapshotContainer.Name(), sourceContainer.Name())
if err != nil {
s.ContainerSnapshotDelete(snapshotContainer)
@@ -1451,7 +1451,7 @@ func btrfsSnapshotDeleteInternal(projectName, poolName string, snapshotName stri
return nil
}
-func (s *storageBtrfs) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageBtrfs) ContainerSnapshotDelete(snapshotContainer Instance) error {
logger.Debugf("Deleting BTRFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1468,7 +1468,7 @@ func (s *storageBtrfs) ContainerSnapshotDelete(snapshotContainer container) erro
return nil
}
-func (s *storageBtrfs) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageBtrfs) ContainerSnapshotStart(container Instance) (bool, error) {
logger.Debugf("Initializing BTRFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1497,7 +1497,7 @@ func (s *storageBtrfs) ContainerSnapshotStart(container container) (bool, error)
return true, nil
}
-func (s *storageBtrfs) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageBtrfs) ContainerSnapshotStop(container Instance) (bool, error) {
logger.Debugf("Stopping BTRFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1529,7 +1529,7 @@ func (s *storageBtrfs) ContainerSnapshotStop(container container) (bool, error)
}
// ContainerSnapshotRename renames a snapshot of a container.
-func (s *storageBtrfs) ContainerSnapshotRename(snapshotContainer container, newName string) error {
+func (s *storageBtrfs) ContainerSnapshotRename(snapshotContainer Instance, newName string) error {
logger.Debugf("Renaming BTRFS storage volume for snapshot \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
// The storage pool must be mounted.
@@ -1553,7 +1553,7 @@ func (s *storageBtrfs) ContainerSnapshotRename(snapshotContainer container, newN
// Needed for live migration where an empty snapshot needs to be created before
// rsyncing into it.
-func (s *storageBtrfs) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageBtrfs) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
logger.Debugf("Creating empty BTRFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
// Mount the storage pool.
@@ -1615,7 +1615,7 @@ func (s *storageBtrfs) doBtrfsBackup(cur string, prev string, target string) err
return err
}
-func (s *storageBtrfs) doContainerBackupCreateOptimized(tmpPath string, backup backup, source container) error {
+func (s *storageBtrfs) doContainerBackupCreateOptimized(tmpPath string, backup backup, source Instance) error {
// Handle snapshots
finalParent := ""
if !backup.instanceOnly {
@@ -1688,7 +1688,7 @@ func (s *storageBtrfs) doContainerBackupCreateOptimized(tmpPath string, backup b
return nil
}
-func (s *storageBtrfs) doContainerBackupCreateVanilla(tmpPath string, backup backup, source container) error {
+func (s *storageBtrfs) doContainerBackupCreateVanilla(tmpPath string, backup backup, source Instance) error {
// Prepare for rsync
rsync := func(oldPath string, newPath string, bwlimit string) error {
output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
@@ -1771,7 +1771,7 @@ func (s *storageBtrfs) doContainerBackupCreateVanilla(tmpPath string, backup bac
return nil
}
-func (s *storageBtrfs) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageBtrfs) ContainerBackupCreate(backup backup, source Instance) error {
// Start storage
ourStart, err := source.StorageStart()
if err != nil {
@@ -2456,7 +2456,7 @@ func (s *storageBtrfs) MigrationSource(args MigrationSourceArgs) (MigrationStora
* xfer costs. Then, after all that, we send the container itself.
*/
var err error
- var snapshots = []container{}
+ var snapshots = []Instance{}
if !args.InstanceOnly {
snapshots, err = args.Container.Snapshots()
if err != nil {
diff --git a/lxd/storage_ceph.go b/lxd/storage_ceph.go
index 7085688140..c76a3741fe 100644
--- a/lxd/storage_ceph.go
+++ b/lxd/storage_ceph.go
@@ -758,7 +758,7 @@ func (s *storageCeph) StoragePoolUpdate(writable *api.StoragePoolPut, changedCon
return nil
}
-func (s *storageCeph) ContainerStorageReady(container container) bool {
+func (s *storageCeph) ContainerStorageReady(container Instance) bool {
name := container.Name()
logger.Debugf(`Checking if RBD storage volume for container "%s" on storage pool "%s" is ready`, name, s.pool.Name)
@@ -773,7 +773,7 @@ func (s *storageCeph) ContainerStorageReady(container container) bool {
return true
}
-func (s *storageCeph) ContainerCreate(container container) error {
+func (s *storageCeph) ContainerCreate(container Instance) error {
containerName := container.Name()
err := s.doContainerCreate(container.Project(), containerName, container.IsPrivileged())
if err != nil {
@@ -792,7 +792,7 @@ func (s *storageCeph) ContainerCreate(container container) error {
return nil
}
-func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageCeph) ContainerCreateFromImage(container Instance, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf(`Creating RBD storage volume for container "%s" on storage pool "%s"`, s.volume.Name, s.pool.Name)
revert := true
@@ -944,7 +944,7 @@ func (s *storageCeph) ContainerCreateFromImage(container container, fingerprint
return nil
}
-func (s *storageCeph) ContainerDelete(container container) error {
+func (s *storageCeph) ContainerDelete(container Instance) error {
containerName := container.Name()
logger.Debugf(`Deleting RBD storage volume for container "%s" on storage pool "%s"`, containerName, s.pool.Name)
@@ -993,7 +993,7 @@ func (s *storageCeph) ContainerDelete(container container) error {
// - for each snapshot dump the contents into the empty storage volume and
// after each dump take a snapshot of the rbd storage volume
// - dump the container contents into the rbd storage volume.
-func (s *storageCeph) doCrossPoolContainerCopy(target container, source container, containerOnly bool, refresh bool, refreshSnapshots []container) error {
+func (s *storageCeph) doCrossPoolContainerCopy(target Instance, source Instance, containerOnly bool, refresh bool, refreshSnapshots []Instance) error {
sourcePool, err := source.StoragePool()
if err != nil {
return err
@@ -1018,7 +1018,7 @@ func (s *storageCeph) doCrossPoolContainerCopy(target container, source containe
return err
}
- var snapshots []container
+ var snapshots []Instance
if refresh {
snapshots = refreshSnapshots
@@ -1088,8 +1088,7 @@ func (s *storageCeph) doCrossPoolContainerCopy(target container, source containe
return nil
}
-func (s *storageCeph) ContainerCopy(target container, source container,
- containerOnly bool) error {
+func (s *storageCeph) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
sourceContainerName := source.Name()
logger.Debugf(`Copying RBD container storage %s to %s`, sourceContainerName, target.Name())
@@ -1322,13 +1321,13 @@ func (s *storageCeph) ContainerCopy(target container, source container,
return nil
}
-func (s *storageCeph) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageCeph) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
logger.Debugf(`Refreshing RBD container storage for %s from %s`, target.Name(), source.Name())
return s.doCrossPoolContainerCopy(target, source, len(snapshots) == 0, true, snapshots)
}
-func (s *storageCeph) ContainerMount(c container) (bool, error) {
+func (s *storageCeph) ContainerMount(c Instance) (bool, error) {
logger.Debugf("Mounting RBD storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
ourMount, err := s.doContainerMount(c.Project(), c.Name())
@@ -1340,7 +1339,7 @@ func (s *storageCeph) ContainerMount(c container) (bool, error) {
return ourMount, nil
}
-func (s *storageCeph) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageCeph) ContainerUmount(c Instance, path string) (bool, error) {
logger.Debugf("Unmounting RBD storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
name := c.Name()
@@ -1389,7 +1388,7 @@ func (s *storageCeph) ContainerUmount(c container, path string) (bool, error) {
return ourUmount, nil
}
-func (s *storageCeph) ContainerRename(c container, newName string) error {
+func (s *storageCeph) ContainerRename(c Instance, newName string) error {
oldName := c.Name()
containerPath := c.Path()
@@ -1541,7 +1540,7 @@ func (s *storageCeph) ContainerRename(c container, newName string) error {
return nil
}
-func (s *storageCeph) ContainerRestore(target container, source container) error {
+func (s *storageCeph) ContainerRestore(target Instance, source Instance) error {
sourceName := source.Name()
targetName := target.Name()
@@ -1583,11 +1582,11 @@ func (s *storageCeph) ContainerRestore(target container, source container) error
return nil
}
-func (s *storageCeph) ContainerGetUsage(container container) (int64, error) {
+func (s *storageCeph) ContainerGetUsage(container Instance) (int64, error) {
return -1, fmt.Errorf("RBD quotas are currently not supported")
}
-func (s *storageCeph) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageCeph) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
containerMntPoint := driver.GetContainerMountPoint(sourceContainer.Project(), s.pool.Name, sourceContainer.Name())
if shared.IsMountPoint(containerMntPoint) {
// This is costly but we need to ensure that all cached data has
@@ -1606,7 +1605,7 @@ func (s *storageCeph) ContainerSnapshotCreate(snapshotContainer container, sourc
return s.doContainerSnapshotCreate(sourceContainer.Project(), snapshotContainer.Name(), sourceContainer.Name())
}
-func (s *storageCeph) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageCeph) ContainerSnapshotDelete(snapshotContainer Instance) error {
logger.Debugf(`Deleting RBD storage volume for snapshot "%s" on storage pool "%s"`, s.volume.Name, s.pool.Name)
snapshotContainerName := snapshotContainer.Name()
@@ -1672,7 +1671,7 @@ func (s *storageCeph) ContainerSnapshotDelete(snapshotContainer container) error
return nil
}
-func (s *storageCeph) ContainerSnapshotRename(c container, newName string) error {
+func (s *storageCeph) ContainerSnapshotRename(c Instance, newName string) error {
oldName := c.Name()
logger.Debugf(`Renaming RBD storage volume for snapshot "%s" from "%s" to "%s"`, oldName, oldName, newName)
@@ -1720,7 +1719,7 @@ func (s *storageCeph) ContainerSnapshotRename(c container, newName string) error
return nil
}
-func (s *storageCeph) ContainerSnapshotStart(c container) (bool, error) {
+func (s *storageCeph) ContainerSnapshotStart(c Instance) (bool, error) {
containerName := c.Name()
logger.Debugf(`Initializing RBD storage volume for snapshot "%s" on storage pool "%s"`, containerName, s.pool.Name)
@@ -1836,7 +1835,7 @@ func (s *storageCeph) ContainerSnapshotStart(c container) (bool, error) {
return true, nil
}
-func (s *storageCeph) ContainerSnapshotStop(c container) (bool, error) {
+func (s *storageCeph) ContainerSnapshotStop(c Instance) (bool, error) {
logger.Debugf(`Stopping RBD storage volume for snapshot "%s" on storage pool "%s"`, c.Name(), s.pool.Name)
containerName := c.Name()
@@ -1883,14 +1882,14 @@ func (s *storageCeph) ContainerSnapshotStop(c container) (bool, error) {
return true, nil
}
-func (s *storageCeph) ContainerSnapshotCreateEmpty(c container) error {
+func (s *storageCeph) ContainerSnapshotCreateEmpty(c Instance) error {
logger.Debugf(`Creating empty RBD storage volume for snapshot "%s" on storage pool "%s" (noop)`, c.Name(), s.pool.Name)
logger.Debugf(`Created empty RBD storage volume for snapshot "%s" on storage pool "%s" (noop)`, c.Name(), s.pool.Name)
return nil
}
-func (s *storageCeph) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageCeph) ContainerBackupCreate(backup backup, source Instance) error {
// Start storage
ourStart, err := source.StorageStart()
if err != nil {
diff --git a/lxd/storage_ceph_utils.go b/lxd/storage_ceph_utils.go
index 1a82a510f6..4d5c20222e 100644
--- a/lxd/storage_ceph_utils.go
+++ b/lxd/storage_ceph_utils.go
@@ -727,8 +727,7 @@ func (s *storageCeph) getRBDMountOptions() string {
// copyWithoutSnapshotsFull creates a non-sparse copy of a container
// This does not introduce a dependency relation between the source RBD storage
// volume and the target RBD storage volume.
-func (s *storageCeph) copyWithoutSnapshotsFull(target container,
- source container) error {
+func (s *storageCeph) copyWithoutSnapshotsFull(target Instance, source Instance) error {
logger.Debugf(`Creating non-sparse copy of RBD storage volume for container "%s" to "%s" without snapshots`, source.Name(), target.Name())
sourceIsSnapshot := source.IsSnapshot()
@@ -796,8 +795,7 @@ func (s *storageCeph) copyWithoutSnapshotsFull(target container,
// copyWithoutSnapshotsFull creates a sparse copy of a container
// This introduces a dependency relation between the source RBD storage volume
// and the target RBD storage volume.
-func (s *storageCeph) copyWithoutSnapshotsSparse(target container,
- source container) error {
+func (s *storageCeph) copyWithoutSnapshotsSparse(target Instance, source Instance) error {
logger.Debugf(`Creating sparse copy of RBD storage volume for container "%s" to "%s" without snapshots`, source.Name(),
target.Name())
@@ -1586,7 +1584,7 @@ func (s *storageCeph) cephRBDVolumeDumpToFile(sourceVolumeName string, file stri
}
// cephRBDVolumeBackupCreate creates a backup of a container or snapshot.
-func (s *storageCeph) cephRBDVolumeBackupCreate(tmpPath string, backup backup, source container) error {
+func (s *storageCeph) cephRBDVolumeBackupCreate(tmpPath string, backup backup, source Instance) error {
sourceIsSnapshot := source.IsSnapshot()
sourceContainerName := source.Name()
sourceContainerOnlyName := project.Prefix(source.Project(), sourceContainerName)
diff --git a/lxd/storage_cephfs.go b/lxd/storage_cephfs.go
index 305de37498..0c3f8b9aa3 100644
--- a/lxd/storage_cephfs.go
+++ b/lxd/storage_cephfs.go
@@ -618,81 +618,81 @@ func (s *storageCephFs) StoragePoolVolumeRename(newName string) error {
return nil
}
-func (s *storageCephFs) ContainerStorageReady(container container) bool {
+func (s *storageCephFs) ContainerStorageReady(container Instance) bool {
containerMntPoint := driver.GetContainerMountPoint(container.Project(), s.pool.Name, container.Name())
ok, _ := shared.PathIsEmpty(containerMntPoint)
return !ok
}
-func (s *storageCephFs) ContainerCreate(container container) error {
+func (s *storageCephFs) ContainerCreate(container Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerCreateFromImage(container container, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageCephFs) ContainerCreateFromImage(container Instance, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerCanRestore(container container, sourceContainer container) error {
+func (s *storageCephFs) ContainerCanRestore(container Instance, sourceContainer Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerDelete(container container) error {
+func (s *storageCephFs) ContainerDelete(container Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageCephFs) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageCephFs) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerMount(c container) (bool, error) {
+func (s *storageCephFs) ContainerMount(c Instance) (bool, error) {
return false, fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageCephFs) ContainerUmount(c Instance, path string) (bool, error) {
return false, fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerRename(container container, newName string) error {
+func (s *storageCephFs) ContainerRename(container Instance, newName string) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerRestore(container container, sourceContainer container) error {
+func (s *storageCephFs) ContainerRestore(container Instance, sourceContainer Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerGetUsage(c container) (int64, error) {
+func (s *storageCephFs) ContainerGetUsage(c Instance) (int64, error) {
return -1, fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageCephFs) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageCephFs) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageCephFs) ContainerSnapshotDelete(snapshotContainer Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotRename(snapshotContainer container, newName string) error {
+func (s *storageCephFs) ContainerSnapshotRename(snapshotContainer Instance, newName string) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageCephFs) ContainerSnapshotStart(container Instance) (bool, error) {
return false, fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageCephFs) ContainerSnapshotStop(container Instance) (bool, error) {
return false, fmt.Errorf("CEPHFS cannot be used for containers")
}
-func (s *storageCephFs) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageCephFs) ContainerBackupCreate(backup backup, source Instance) error {
return fmt.Errorf("CEPHFS cannot be used for containers")
}
diff --git a/lxd/storage_dir.go b/lxd/storage_dir.go
index 3c0d464b1a..ee04ffad0b 100644
--- a/lxd/storage_dir.go
+++ b/lxd/storage_dir.go
@@ -488,13 +488,13 @@ func (s *storageDir) StoragePoolVolumeRename(newName string) error {
storagePoolVolumeTypeCustom, s.poolID)
}
-func (s *storageDir) ContainerStorageReady(container container) bool {
+func (s *storageDir) ContainerStorageReady(container Instance) bool {
containerMntPoint := driver.GetContainerMountPoint(container.Project(), s.pool.Name, container.Name())
ok, _ := shared.PathIsEmpty(containerMntPoint)
return !ok
}
-func (s *storageDir) ContainerCreate(container container) error {
+func (s *storageDir) ContainerCreate(container Instance) error {
logger.Debugf("Creating empty DIR storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -536,7 +536,7 @@ func (s *storageDir) ContainerCreate(container container) error {
return nil
}
-func (s *storageDir) ContainerCreateFromImage(container container, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageDir) ContainerCreateFromImage(container Instance, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating DIR storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -586,7 +586,7 @@ func (s *storageDir) ContainerCreateFromImage(container container, imageFingerpr
return nil
}
-func (s *storageDir) ContainerDelete(container container) error {
+func (s *storageDir) ContainerDelete(container Instance) error {
logger.Debugf("Deleting DIR storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
source := s.pool.Config["source"]
@@ -648,7 +648,7 @@ func (s *storageDir) ContainerDelete(container container) error {
return nil
}
-func (s *storageDir) copyContainer(target container, source container) error {
+func (s *storageDir) copyContainer(target Instance, source Instance) error {
_, sourcePool, _ := source.Storage().GetContainerPoolInfo()
_, targetPool, _ := target.Storage().GetContainerPoolInfo()
sourceContainerMntPoint := driver.GetContainerMountPoint(source.Project(), sourcePool, source.Name())
@@ -705,7 +705,7 @@ func (s *storageDir) copySnapshot(target container, targetPool string, source co
return nil
}
-func (s *storageDir) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageDir) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
logger.Debugf("Copying DIR container storage %s to %s", source.Name(), target.Name())
err := s.doContainerCopy(target, source, containerOnly, false, nil)
@@ -717,7 +717,7 @@ func (s *storageDir) ContainerCopy(target container, source container, container
return nil
}
-func (s *storageDir) doContainerCopy(target container, source container, containerOnly bool, refresh bool, refreshSnapshots []container) error {
+func (s *storageDir) doContainerCopy(target Instance, source Instance, containerOnly bool, refresh bool, refreshSnapshots []Instance) error {
_, err := s.StoragePoolMount()
if err != nil {
return err
@@ -767,7 +767,7 @@ func (s *storageDir) doContainerCopy(target container, source container, contain
return nil
}
- var snapshots []container
+ var snapshots []Instance
if refresh {
snapshots = refreshSnapshots
@@ -804,7 +804,7 @@ func (s *storageDir) doContainerCopy(target container, source container, contain
return nil
}
-func (s *storageDir) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageDir) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
logger.Debugf("Refreshing DIR container storage for %s from %s", target.Name(), source.Name())
err := s.doContainerCopy(target, source, len(snapshots) == 0, true, snapshots)
@@ -816,15 +816,15 @@ func (s *storageDir) ContainerRefresh(target container, source container, snapsh
return nil
}
-func (s *storageDir) ContainerMount(c container) (bool, error) {
+func (s *storageDir) ContainerMount(c Instance) (bool, error) {
return s.StoragePoolMount()
}
-func (s *storageDir) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageDir) ContainerUmount(c Instance, path string) (bool, error) {
return true, nil
}
-func (s *storageDir) ContainerRename(container container, newName string) error {
+func (s *storageDir) ContainerRename(container Instance, newName string) error {
logger.Debugf("Renaming DIR storage volume for container \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
_, err := s.StoragePoolMount()
@@ -879,7 +879,7 @@ func (s *storageDir) ContainerRename(container container, newName string) error
return nil
}
-func (s *storageDir) ContainerRestore(container container, sourceContainer container) error {
+func (s *storageDir) ContainerRestore(container Instance, sourceContainer Instance) error {
logger.Debugf("Restoring DIR storage volume for container \"%s\" from %s to %s", s.volume.Name, sourceContainer.Name(), container.Name())
_, err := s.StoragePoolMount()
@@ -901,7 +901,7 @@ func (s *storageDir) ContainerRestore(container container, sourceContainer conta
return nil
}
-func (s *storageDir) ContainerGetUsage(c container) (int64, error) {
+func (s *storageDir) ContainerGetUsage(c Instance) (int64, error) {
path := driver.GetContainerMountPoint(c.Project(), s.pool.Name, c.Name())
ok, err := quota.Supported(path)
@@ -918,7 +918,7 @@ func (s *storageDir) ContainerGetUsage(c container) (int64, error) {
return size, nil
}
-func (s *storageDir) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageDir) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
logger.Debugf("Creating DIR storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -934,7 +934,7 @@ func (s *storageDir) ContainerSnapshotCreate(snapshotContainer container, source
return err
}
- rsync := func(snapshotContainer container, oldPath string, newPath string, bwlimit string) error {
+ rsync := func(snapshotContainer Instance, oldPath string, newPath string, bwlimit string) error {
output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
if err != nil {
s.ContainerDelete(snapshotContainer)
@@ -995,7 +995,7 @@ onSuccess:
return nil
}
-func (s *storageDir) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageDir) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
logger.Debugf("Creating empty DIR storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1069,7 +1069,7 @@ func dirSnapshotDeleteInternal(projectName, poolName string, snapshotName string
return nil
}
-func (s *storageDir) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageDir) ContainerSnapshotDelete(snapshotContainer Instance) error {
logger.Debugf("Deleting DIR storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
_, err := s.StoragePoolMount()
@@ -1092,7 +1092,7 @@ func (s *storageDir) ContainerSnapshotDelete(snapshotContainer container) error
return nil
}
-func (s *storageDir) ContainerSnapshotRename(snapshotContainer container, newName string) error {
+func (s *storageDir) ContainerSnapshotRename(snapshotContainer Instance, newName string) error {
logger.Debugf("Renaming DIR storage volume for snapshot \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
_, err := s.StoragePoolMount()
@@ -1113,15 +1113,15 @@ func (s *storageDir) ContainerSnapshotRename(snapshotContainer container, newNam
return nil
}
-func (s *storageDir) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageDir) ContainerSnapshotStart(container Instance) (bool, error) {
return s.StoragePoolMount()
}
-func (s *storageDir) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageDir) ContainerSnapshotStop(container Instance) (bool, error) {
return true, nil
}
-func (s *storageDir) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageDir) ContainerBackupCreate(backup backup, source Instance) error {
// Start storage
ourStart, err := source.StorageStart()
if err != nil {
diff --git a/lxd/storage_lvm.go b/lxd/storage_lvm.go
index 87be1a097f..b764dc9f59 100644
--- a/lxd/storage_lvm.go
+++ b/lxd/storage_lvm.go
@@ -916,7 +916,7 @@ func (s *storageLvm) StoragePoolVolumeRename(newName string) error {
storagePoolVolumeTypeCustom, s.poolID)
}
-func (s *storageLvm) ContainerStorageReady(container container) bool {
+func (s *storageLvm) ContainerStorageReady(container Instance) bool {
containerLvmName := containerNameToLVName(container.Name())
poolName := s.getOnDiskPoolName()
containerLvmPath := getLvmDevPath(container.Project(), poolName, storagePoolVolumeAPIEndpointContainers, containerLvmName)
@@ -924,7 +924,7 @@ func (s *storageLvm) ContainerStorageReady(container container) bool {
return ok
}
-func (s *storageLvm) ContainerCreate(container container) error {
+func (s *storageLvm) ContainerCreate(container Instance) error {
logger.Debugf("Creating empty LVM storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
tryUndo := true
@@ -988,7 +988,7 @@ func (s *storageLvm) ContainerCreate(container container) error {
return nil
}
-func (s *storageLvm) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageLvm) ContainerCreateFromImage(container Instance, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating LVM storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
tryUndo := true
@@ -1107,7 +1107,7 @@ func lvmContainerDeleteInternal(projectName, poolName string, ctName string, isS
return nil
}
-func (s *storageLvm) ContainerDelete(container container) error {
+func (s *storageLvm) ContainerDelete(container Instance) error {
logger.Debugf("Deleting LVM storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
containerName := container.Name()
@@ -1121,7 +1121,7 @@ func (s *storageLvm) ContainerDelete(container container) error {
return nil
}
-func (s *storageLvm) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageLvm) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
logger.Debugf("Copying LVM container storage for container %s to %s", source.Name(), target.Name())
err := s.doContainerCopy(target, source, containerOnly, false, nil)
@@ -1133,7 +1133,7 @@ func (s *storageLvm) ContainerCopy(target container, source container, container
return nil
}
-func (s *storageLvm) doContainerCopy(target container, source container, containerOnly bool, refresh bool, refreshSnapshots []container) error {
+func (s *storageLvm) doContainerCopy(target Instance, source Instance, containerOnly bool, refresh bool, refreshSnapshots []Instance) error {
ourStart, err := source.StorageStart()
if err != nil {
return err
@@ -1177,7 +1177,7 @@ func (s *storageLvm) doContainerCopy(target container, source container, contain
return nil
}
- var snapshots []container
+ var snapshots []Instance
if refresh {
snapshots = refreshSnapshots
@@ -1219,7 +1219,7 @@ func (s *storageLvm) doContainerCopy(target container, source container, contain
return nil
}
-func (s *storageLvm) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageLvm) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
logger.Debugf("Refreshing LVM container storage for %s from %s", target.Name(), source.Name())
err := s.doContainerCopy(target, source, len(snapshots) == 0, true, snapshots)
@@ -1231,7 +1231,7 @@ func (s *storageLvm) ContainerRefresh(target container, source container, snapsh
return nil
}
-func (s *storageLvm) ContainerMount(c container) (bool, error) {
+func (s *storageLvm) ContainerMount(c Instance) (bool, error) {
return s.doContainerMount(c.Project(), c.Name(), false)
}
@@ -1292,7 +1292,7 @@ func (s *storageLvm) doContainerMount(project, name string, snap bool) (bool, er
return ourMount, nil
}
-func (s *storageLvm) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageLvm) ContainerUmount(c Instance, path string) (bool, error) {
return s.umount(c.Project(), c.Name(), path)
}
@@ -1340,7 +1340,7 @@ func (s *storageLvm) umount(project, name string, path string) (bool, error) {
return ourUmount, nil
}
-func (s *storageLvm) ContainerRename(container container, newContainerName string) error {
+func (s *storageLvm) ContainerRename(container Instance, newContainerName string) error {
logger.Debugf("Renaming LVM storage volume for container \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newContainerName)
tryUndo := true
@@ -1421,7 +1421,7 @@ func (s *storageLvm) ContainerRename(container container, newContainerName strin
return nil
}
-func (s *storageLvm) ContainerRestore(target container, source container) error {
+func (s *storageLvm) ContainerRestore(target Instance, source Instance) error {
logger.Debugf("Restoring LVM storage volume for container \"%s\" from %s to %s", s.volume.Name, source.Name(), target.Name())
_, sourcePool, _ := source.Storage().GetContainerPoolInfo()
@@ -1500,11 +1500,11 @@ func (s *storageLvm) ContainerRestore(target container, source container) error
return nil
}
-func (s *storageLvm) ContainerGetUsage(container container) (int64, error) {
+func (s *storageLvm) ContainerGetUsage(container Instance) (int64, error) {
return -1, fmt.Errorf("the LVM container backend doesn't support quotas")
}
-func (s *storageLvm) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageLvm) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
logger.Debugf("Creating LVM storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
err := s.createSnapshotContainer(snapshotContainer, sourceContainer, true)
@@ -1516,7 +1516,7 @@ func (s *storageLvm) ContainerSnapshotCreate(snapshotContainer container, source
return nil
}
-func (s *storageLvm) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageLvm) ContainerSnapshotDelete(snapshotContainer Instance) error {
logger.Debugf("Deleting LVM storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
err := s.ContainerDelete(snapshotContainer)
@@ -1528,7 +1528,7 @@ func (s *storageLvm) ContainerSnapshotDelete(snapshotContainer container) error
return nil
}
-func (s *storageLvm) ContainerSnapshotRename(snapshotContainer container, newContainerName string) error {
+func (s *storageLvm) ContainerSnapshotRename(snapshotContainer Instance, newContainerName string) error {
logger.Debugf("Renaming LVM storage volume for snapshot \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newContainerName)
tryUndo := true
@@ -1560,7 +1560,7 @@ func (s *storageLvm) ContainerSnapshotRename(snapshotContainer container, newCon
return nil
}
-func (s *storageLvm) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageLvm) ContainerSnapshotStart(container Instance) (bool, error) {
logger.Debugf(`Initializing LVM storage volume for snapshot "%s" on storage pool "%s"`, s.volume.Name, s.pool.Name)
poolName := s.getOnDiskPoolName()
@@ -1610,7 +1610,7 @@ func (s *storageLvm) ContainerSnapshotStart(container container) (bool, error) {
return true, nil
}
-func (s *storageLvm) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageLvm) ContainerSnapshotStop(container Instance) (bool, error) {
logger.Debugf("Stopping LVM storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
containerName := container.Name()
@@ -1649,7 +1649,7 @@ func (s *storageLvm) ContainerSnapshotStop(container container) (bool, error) {
return true, nil
}
-func (s *storageLvm) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageLvm) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
logger.Debugf("Creating empty LVM storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
err := s.ContainerCreate(snapshotContainer)
@@ -1661,7 +1661,7 @@ func (s *storageLvm) ContainerSnapshotCreateEmpty(snapshotContainer container) e
return nil
}
-func (s *storageLvm) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageLvm) ContainerBackupCreate(backup backup, source Instance) error {
poolName := s.getOnDiskPoolName()
// Start storage
diff --git a/lxd/storage_lvm_utils.go b/lxd/storage_lvm_utils.go
index 7ea61f13f2..14d627c447 100644
--- a/lxd/storage_lvm_utils.go
+++ b/lxd/storage_lvm_utils.go
@@ -257,7 +257,7 @@ func (s *storageLvm) createSnapshotLV(project, vgName string, origLvName string,
return targetLvmVolumePath, nil
}
-func (s *storageLvm) createSnapshotContainer(snapshotContainer container, sourceContainer container, readonly bool) error {
+func (s *storageLvm) createSnapshotContainer(snapshotContainer Instance, sourceContainer Instance, readonly bool) error {
tryUndo := true
sourceContainerName := sourceContainer.Name()
@@ -304,7 +304,7 @@ func (s *storageLvm) createSnapshotContainer(snapshotContainer container, source
}
// Copy a container on a storage pool that does use a thinpool.
-func (s *storageLvm) copyContainerThinpool(target container, source container, readonly bool) error {
+func (s *storageLvm) copyContainerThinpool(target Instance, source Instance, readonly bool) error {
err := s.createSnapshotContainer(target, source, readonly)
if err != nil {
logger.Errorf("Error creating snapshot LV for copy: %s", err)
@@ -371,7 +371,7 @@ func (s *storageLvm) copySnapshot(target container, source container, refresh bo
}
// Copy a container on a storage pool that does not use a thinpool.
-func (s *storageLvm) copyContainerLv(target container, source container, readonly bool, refresh bool) error {
+func (s *storageLvm) copyContainerLv(target Instance, source Instance, readonly bool, refresh bool) error {
exists, err := storageLVExists(getLvmDevPath(target.Project(), s.getOnDiskPoolName(),
storagePoolVolumeAPIEndpointContainers, containerNameToLVName(target.Name())))
if err != nil {
@@ -446,7 +446,7 @@ func (s *storageLvm) copyContainerLv(target container, source container, readonl
}
// Copy an lvm container.
-func (s *storageLvm) copyContainer(target container, source container, refresh bool) error {
+func (s *storageLvm) copyContainer(target Instance, source Instance, refresh bool) error {
targetPool, err := target.StoragePool()
if err != nil {
return err
@@ -484,7 +484,7 @@ func (s *storageLvm) copyContainer(target container, source container, refresh b
return nil
}
-func (s *storageLvm) containerCreateFromImageLv(c container, fp string) error {
+func (s *storageLvm) containerCreateFromImageLv(c Instance, fp string) error {
containerName := c.Name()
err := s.ContainerCreate(c)
@@ -516,7 +516,7 @@ func (s *storageLvm) containerCreateFromImageLv(c container, fp string) error {
return nil
}
-func (s *storageLvm) containerCreateFromImageThinLv(c container, fp string) error {
+func (s *storageLvm) containerCreateFromImageThinLv(c Instance, fp string) error {
poolName := s.getOnDiskPoolName()
// Check if the image already exists.
imageLvmDevPath := getLvmDevPath("default", poolName, storagePoolVolumeAPIEndpointImages, fp)
diff --git a/lxd/storage_migration.go b/lxd/storage_migration.go
index 218458d118..2453fd5f9f 100644
--- a/lxd/storage_migration.go
+++ b/lxd/storage_migration.go
@@ -41,8 +41,8 @@ type MigrationStorageSourceDriver interface {
}
type rsyncStorageSourceDriver struct {
- container container
- snapshots []container
+ container Instance
+ snapshots []Instance
rsyncFeatures []string
}
@@ -145,7 +145,7 @@ func rsyncStorageMigrationSource(args MigrationSourceArgs) (MigrationStorageSour
}
func rsyncRefreshSource(refreshSnapshots []string, args MigrationSourceArgs) (MigrationStorageSourceDriver, error) {
- var snapshots = []container{}
+ var snapshots = []Instance{}
if !args.InstanceOnly {
allSnapshots, err := args.Container.Snapshots()
if err != nil {
@@ -167,7 +167,7 @@ func rsyncRefreshSource(refreshSnapshots []string, args MigrationSourceArgs) (Mi
func rsyncMigrationSource(args MigrationSourceArgs) (MigrationStorageSourceDriver, error) {
var err error
- var snapshots = []container{}
+ var snapshots = []Instance{}
if !args.InstanceOnly {
snapshots, err = args.Container.Snapshots()
if err != nil {
diff --git a/lxd/storage_migration_btrfs.go b/lxd/storage_migration_btrfs.go
index 2f58187467..166fd8599c 100644
--- a/lxd/storage_migration_btrfs.go
+++ b/lxd/storage_migration_btrfs.go
@@ -15,8 +15,8 @@ import (
)
type btrfsMigrationSourceDriver struct {
- container container
- snapshots []container
+ container Instance
+ snapshots []Instance
btrfsSnapshotNames []string
btrfs *storageBtrfs
runningSnapName string
diff --git a/lxd/storage_mock.go b/lxd/storage_mock.go
index 950aa4d215..3b9520928e 100644
--- a/lxd/storage_mock.go
+++ b/lxd/storage_mock.go
@@ -109,87 +109,73 @@ func (s *storageMock) StoragePoolUpdate(writable *api.StoragePoolPut, changedCon
return nil
}
-func (s *storageMock) ContainerStorageReady(container container) bool {
+func (s *storageMock) ContainerStorageReady(container Instance) bool {
return true
}
-func (s *storageMock) ContainerCreate(container container) error {
+func (s *storageMock) ContainerCreate(container Instance) error {
return nil
}
-func (s *storageMock) ContainerCreateFromImage(
- container container, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
-
+func (s *storageMock) ContainerCreateFromImage(container Instance, imageFingerprint string, tracker *ioprogress.ProgressTracker) error {
return nil
}
-func (s *storageMock) ContainerDelete(container container) error {
+func (s *storageMock) ContainerDelete(container Instance) error {
return nil
}
-func (s *storageMock) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageMock) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
return nil
}
-func (s *storageMock) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageMock) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
return nil
}
-func (s *storageMock) ContainerMount(c container) (bool, error) {
+func (s *storageMock) ContainerMount(c Instance) (bool, error) {
return true, nil
}
-func (s *storageMock) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageMock) ContainerUmount(c Instance, path string) (bool, error) {
return true, nil
}
-func (s *storageMock) ContainerRename(
- container container, newName string) error {
-
+func (s *storageMock) ContainerRename(container Instance, newName string) error {
return nil
}
-func (s *storageMock) ContainerRestore(
- container container, sourceContainer container) error {
-
+func (s *storageMock) ContainerRestore(container Instance, sourceContainer Instance) error {
return nil
}
-func (s *storageMock) ContainerGetUsage(
- container container) (int64, error) {
-
+func (s *storageMock) ContainerGetUsage(container Instance) (int64, error) {
return 0, nil
}
-func (s *storageMock) ContainerSnapshotCreate(
- snapshotContainer container, sourceContainer container) error {
-
+func (s *storageMock) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
return nil
}
-func (s *storageMock) ContainerSnapshotDelete(
- snapshotContainer container) error {
-
+func (s *storageMock) ContainerSnapshotDelete(snapshotContainer Instance) error {
return nil
}
-func (s *storageMock) ContainerSnapshotRename(
- snapshotContainer container, newName string) error {
-
+func (s *storageMock) ContainerSnapshotRename(snapshotContainer Instance, newName string) error {
return nil
}
-func (s *storageMock) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageMock) ContainerSnapshotStart(container Instance) (bool, error) {
return true, nil
}
-func (s *storageMock) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageMock) ContainerSnapshotStop(container Instance) (bool, error) {
return true, nil
}
-func (s *storageMock) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageMock) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
return nil
}
-func (s *storageMock) ContainerBackupCreate(backup backup, sourceContainer container) error {
+func (s *storageMock) ContainerBackupCreate(backup backup, sourceContainer Instance) error {
return nil
}
diff --git a/lxd/storage_zfs.go b/lxd/storage_zfs.go
index be35447063..9c75819e96 100644
--- a/lxd/storage_zfs.go
+++ b/lxd/storage_zfs.go
@@ -760,11 +760,11 @@ func (s *storageZfs) StoragePoolVolumeRename(newName string) error {
}
// Things we don't need to care about
-func (s *storageZfs) ContainerMount(c container) (bool, error) {
+func (s *storageZfs) ContainerMount(c Instance) (bool, error) {
return s.doContainerMount(c.Project(), c.Name(), c.IsPrivileged())
}
-func (s *storageZfs) ContainerUmount(c container, path string) (bool, error) {
+func (s *storageZfs) ContainerUmount(c Instance, path string) (bool, error) {
logger.Debugf("Unmounting ZFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
name := c.Name()
@@ -809,13 +809,13 @@ func (s *storageZfs) ContainerUmount(c container, path string) (bool, error) {
}
// Things we do have to care about
-func (s *storageZfs) ContainerStorageReady(container container) bool {
+func (s *storageZfs) ContainerStorageReady(container Instance) bool {
volumeName := project.Prefix(container.Project(), container.Name())
fs := fmt.Sprintf("containers/%s", volumeName)
return zfsFilesystemEntityExists(s.getOnDiskPoolName(), fs)
}
-func (s *storageZfs) ContainerCreate(container container) error {
+func (s *storageZfs) ContainerCreate(container Instance) error {
err := s.doContainerCreate(container.Project(), container.Name(), container.IsPrivileged())
if err != nil {
s.doContainerDelete(container.Project(), container.Name())
@@ -838,7 +838,7 @@ func (s *storageZfs) ContainerCreate(container container) error {
return nil
}
-func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint string, tracker *ioprogress.ProgressTracker) error {
+func (s *storageZfs) ContainerCreateFromImage(container Instance, fingerprint string, tracker *ioprogress.ProgressTracker) error {
logger.Debugf("Creating ZFS storage volume for container \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
containerPath := container.Path()
@@ -916,7 +916,7 @@ func (s *storageZfs) ContainerCreateFromImage(container container, fingerprint s
return nil
}
-func (s *storageZfs) ContainerDelete(container container) error {
+func (s *storageZfs) ContainerDelete(container Instance) error {
err := s.doContainerDelete(container.Project(), container.Name())
if err != nil {
return err
@@ -925,7 +925,7 @@ func (s *storageZfs) ContainerDelete(container container) error {
return nil
}
-func (s *storageZfs) copyWithoutSnapshotsSparse(target container, source container) error {
+func (s *storageZfs) copyWithoutSnapshotsSparse(target Instance, source Instance) error {
poolName := s.getOnDiskPoolName()
sourceContainerName := source.Name()
@@ -1027,7 +1027,7 @@ func (s *storageZfs) copyWithoutSnapshotsSparse(target container, source contain
return nil
}
-func (s *storageZfs) copyWithoutSnapshotFull(target container, source container) error {
+func (s *storageZfs) copyWithoutSnapshotFull(target Instance, source Instance) error {
logger.Debugf("Creating full ZFS copy \"%s\" to \"%s\"", source.Name(), target.Name())
sourceIsSnapshot := source.IsSnapshot()
@@ -1128,7 +1128,7 @@ func (s *storageZfs) copyWithoutSnapshotFull(target container, source container)
return nil
}
-func (s *storageZfs) copyWithSnapshots(target container, source container, parentSnapshot string) error {
+func (s *storageZfs) copyWithSnapshots(target Instance, source Instance, parentSnapshot string) error {
sourceName := source.Name()
targetParentName, targetSnapOnlyName, _ := shared.ContainerGetParentAndSnapshotName(target.Name())
containersPath := driver.GetSnapshotMountPoint(target.Project(), s.pool.Name, targetParentName)
@@ -1175,7 +1175,7 @@ func (s *storageZfs) copyWithSnapshots(target container, source container, paren
return nil
}
-func (s *storageZfs) doCrossPoolContainerCopy(target container, source container, containerOnly bool, refresh bool, refreshSnapshots []container) error {
+func (s *storageZfs) doCrossPoolContainerCopy(target Instance, source Instance, containerOnly bool, refresh bool, refreshSnapshots []Instance) error {
sourcePool, err := source.StoragePool()
if err != nil {
return err
@@ -1200,7 +1200,7 @@ func (s *storageZfs) doCrossPoolContainerCopy(target container, source container
return err
}
- var snapshots []container
+ var snapshots []Instance
if refresh {
snapshots = refreshSnapshots
@@ -1253,7 +1253,7 @@ func (s *storageZfs) doCrossPoolContainerCopy(target container, source container
return nil
}
-func (s *storageZfs) ContainerCopy(target container, source container, containerOnly bool) error {
+func (s *storageZfs) ContainerCopy(target Instance, source Instance, containerOnly bool) error {
logger.Debugf("Copying ZFS container storage %s to %s", source.Name(), target.Name())
ourStart, err := source.StorageStart()
@@ -1380,7 +1380,7 @@ func (s *storageZfs) ContainerCopy(target container, source container, container
return nil
}
-func (s *storageZfs) ContainerRefresh(target container, source container, snapshots []container) error {
+func (s *storageZfs) ContainerRefresh(target Instance, source Instance, snapshots []Instance) error {
logger.Debugf("Refreshing ZFS container storage for %s from %s", target.Name(), source.Name())
ourStart, err := source.StorageStart()
@@ -1394,7 +1394,7 @@ func (s *storageZfs) ContainerRefresh(target container, source container, snapsh
return s.doCrossPoolContainerCopy(target, source, len(snapshots) == 0, true, snapshots)
}
-func (s *storageZfs) ContainerRename(container container, newName string) error {
+func (s *storageZfs) ContainerRename(container Instance, newName string) error {
logger.Debugf("Renaming ZFS storage volume for container \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
poolName := s.getOnDiskPoolName()
@@ -1478,7 +1478,7 @@ func (s *storageZfs) ContainerRename(container container, newName string) error
return nil
}
-func (s *storageZfs) ContainerRestore(target container, source container) error {
+func (s *storageZfs) ContainerRestore(target Instance, source Instance) error {
logger.Debugf("Restoring ZFS storage volume for container \"%s\" from %s to %s", s.volume.Name, source.Name(), target.Name())
snaps, err := target.Snapshots()
@@ -1542,7 +1542,7 @@ func (s *storageZfs) ContainerRestore(target container, source container) error
return nil
}
-func (s *storageZfs) ContainerGetUsage(container container) (int64, error) {
+func (s *storageZfs) ContainerGetUsage(container Instance) (int64, error) {
var err error
fs := fmt.Sprintf("containers/%s", project.Prefix(container.Project(), container.Name()))
@@ -1621,7 +1621,7 @@ func (s *storageZfs) doContainerSnapshotCreate(projectName, targetName string, s
return nil
}
-func (s *storageZfs) ContainerSnapshotCreate(snapshotContainer container, sourceContainer container) error {
+func (s *storageZfs) ContainerSnapshotCreate(snapshotContainer Instance, sourceContainer Instance) error {
err := s.doContainerSnapshotCreate(sourceContainer.Project(), snapshotContainer.Name(), sourceContainer.Name())
if err != nil {
s.ContainerSnapshotDelete(snapshotContainer)
@@ -1715,7 +1715,7 @@ func zfsSnapshotDeleteInternal(projectName, poolName string, ctName string, onDi
return nil
}
-func (s *storageZfs) ContainerSnapshotDelete(snapshotContainer container) error {
+func (s *storageZfs) ContainerSnapshotDelete(snapshotContainer Instance) error {
logger.Debugf("Deleting ZFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
poolName := s.getOnDiskPoolName()
@@ -1729,7 +1729,7 @@ func (s *storageZfs) ContainerSnapshotDelete(snapshotContainer container) error
return nil
}
-func (s *storageZfs) ContainerSnapshotRename(snapshotContainer container, newName string) error {
+func (s *storageZfs) ContainerSnapshotRename(snapshotContainer Instance, newName string) error {
logger.Debugf("Renaming ZFS storage volume for snapshot \"%s\" from %s to %s", s.volume.Name, s.volume.Name, newName)
oldName := snapshotContainer.Name()
@@ -1794,7 +1794,7 @@ func (s *storageZfs) ContainerSnapshotRename(snapshotContainer container, newNam
return nil
}
-func (s *storageZfs) ContainerSnapshotStart(container container) (bool, error) {
+func (s *storageZfs) ContainerSnapshotStart(container Instance) (bool, error) {
logger.Debugf("Initializing ZFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
cName, sName, _ := shared.ContainerGetParentAndSnapshotName(container.Name())
@@ -1818,7 +1818,7 @@ func (s *storageZfs) ContainerSnapshotStart(container container) (bool, error) {
return true, nil
}
-func (s *storageZfs) ContainerSnapshotStop(container container) (bool, error) {
+func (s *storageZfs) ContainerSnapshotStop(container Instance) (bool, error) {
logger.Debugf("Stopping ZFS storage volume for snapshot \"%s\" on storage pool \"%s\"", s.volume.Name, s.pool.Name)
cName, sName, _ := shared.ContainerGetParentAndSnapshotName(container.Name())
@@ -1833,12 +1833,12 @@ func (s *storageZfs) ContainerSnapshotStop(container container) (bool, error) {
return true, nil
}
-func (s *storageZfs) ContainerSnapshotCreateEmpty(snapshotContainer container) error {
+func (s *storageZfs) ContainerSnapshotCreateEmpty(snapshotContainer Instance) error {
/* don't touch the fs yet, as migration will do that for us */
return nil
}
-func (s *storageZfs) doContainerOnlyBackup(tmpPath string, backup backup, source container) error {
+func (s *storageZfs) doContainerOnlyBackup(tmpPath string, backup backup, source Instance) error {
sourceIsSnapshot := source.IsSnapshot()
poolName := s.getOnDiskPoolName()
@@ -1918,7 +1918,7 @@ func (s *storageZfs) doSnapshotBackup(tmpPath string, backup backup, source cont
return zfsSendCmd.Run()
}
-func (s *storageZfs) doContainerBackupCreateOptimized(tmpPath string, backup backup, source container) error {
+func (s *storageZfs) doContainerBackupCreateOptimized(tmpPath string, backup backup, source Instance) error {
// Handle snapshots
snapshots, err := source.Snapshots()
if err != nil {
@@ -1987,7 +1987,7 @@ func (s *storageZfs) doContainerBackupCreateOptimized(tmpPath string, backup bac
return nil
}
-func (s *storageZfs) doContainerBackupCreateVanilla(tmpPath string, backup backup, source container) error {
+func (s *storageZfs) doContainerBackupCreateVanilla(tmpPath string, backup backup, source Instance) error {
// Prepare for rsync
rsync := func(oldPath string, newPath string, bwlimit string) error {
output, err := rsyncLocalCopy(oldPath, newPath, bwlimit, true)
@@ -2090,7 +2090,7 @@ func (s *storageZfs) doContainerBackupCreateVanilla(tmpPath string, backup backu
return nil
}
-func (s *storageZfs) ContainerBackupCreate(backup backup, source container) error {
+func (s *storageZfs) ContainerBackupCreate(backup backup, source Instance) error {
// Start storage
ourStart, err := source.StorageStart()
if err != nil {
More information about the lxc-devel
mailing list