The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6274
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 puts some of the infrastructure in place for the replacement storage API.
From 205f1be16c93ff0b342638563e78ee0e7c9ab369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com> Date: Fri, 4 Oct 2019 19:02:38 -0400 Subject: [PATCH] lxd/storage: Add new interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Stéphane Graber <stgra...@ubuntu.com> --- lxd/migration/interfaces.go | 12 ++++ lxd/storage/drivers/interface.go | 43 +++++++++++++++ lxd/storage/interfaces.go | 95 ++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 lxd/migration/interfaces.go create mode 100644 lxd/storage/drivers/interface.go create mode 100644 lxd/storage/interfaces.go diff --git a/lxd/migration/interfaces.go b/lxd/migration/interfaces.go new file mode 100644 index 0000000000..7264e9ef91 --- /dev/null +++ b/lxd/migration/interfaces.go @@ -0,0 +1,12 @@ +package migration + +// FIXME: empty stubs until we're ready to move the migration code over + +type SourceArgs struct { +} + +type SinkArgs struct { +} + +type StorageSourceDriver interface { +} diff --git a/lxd/storage/drivers/interface.go b/lxd/storage/drivers/interface.go new file mode 100644 index 0000000000..a552f93d66 --- /dev/null +++ b/lxd/storage/drivers/interface.go @@ -0,0 +1,43 @@ +package drivers + +import ( + "github.com/lxc/lxd/lxd/migration" + "github.com/lxc/lxd/lxd/operations" + "github.com/lxc/lxd/shared/api" +) + +// VolumeType represents a storage volume type. +type VolumeType string + +// VolumeTypeCustom represents a custom storage volume. +const VolumeTypeCustom = VolumeType("custom") + +// VolumeTypeContainer represents a container storage volume. +const VolumeTypeContainer = VolumeType("containers") + +// VolumeTypeImage represents an image storage volume. +const VolumeTypeImage = VolumeType("images") + +// VolumeTypeVM represents a virtual-machine storage volume. +const VolumeTypeVM = VolumeType("virtual-machines") + +// Driver repreents a low-level storage driver. +type Driver interface { + // Internal + Name() string + Version() string + + // Pool + Delete(op *operations.Operation) error + Mount() (bool, error) + Unmount() (bool, error) + GetResources() (*api.ResourcesStoragePool, error) + + // Volumes + DeleteVolume(volType VolumeType, name string, op *operations.Operation) (error) + RenameVolume(volType VolumeType, name string, newName string, op *operations.Operation) (error) + + // Migration + MigrationType() migration.MigrationFSType + PreservesInodes() bool +} diff --git a/lxd/storage/interfaces.go b/lxd/storage/interfaces.go new file mode 100644 index 0000000000..421dc900f0 --- /dev/null +++ b/lxd/storage/interfaces.go @@ -0,0 +1,95 @@ +package storage + +import ( + "github.com/gorilla/websocket" + + "github.com/lxc/lxd/lxd/instance/instancetype" + "github.com/lxc/lxd/lxd/migration" + "github.com/lxc/lxd/lxd/operations" + "github.com/lxc/lxd/lxd/state" + "github.com/lxc/lxd/lxd/storage/drivers" + "github.com/lxc/lxd/shared/api" +) + +// Instance represents the storage relevant subset of a LXD instance +type Instance interface { + Name() string + Project() string + Type() instancetype.Type + Path() string + + IsRunning() bool + Snapshots() ([]Instance, error) + TemplateApply(trigger string) error +} + +// Pool represents a LXD storage pool +type Pool interface { + // Internal + DaemonState() *state.State + + // Pool + ID() int64 + Name() string + Driver() drivers.Driver + + GetResources() (*api.ResourcesStoragePool, error) + Delete(op *operations.Operation) error + + Mount() (bool, error) + Unmount() (bool, error) + + // Instances + CreateInstance(i Instance, op *operations.Operation) error + CreateInstanceFromBackup(i Instance, sourcePath string, op *operations.Operation) error + CreateInstanceFromCopy(i Instance, src Instance, snapshots bool, op *operations.Operation) error + CreateInstanceFromImage(i Instance, fingerprint string, op *operations.Operation) error + CreateInstanceFromMigration(i Instance, conn *websocket.Conn, args migration.SinkArgs, op *operations.Operation) error + RenameInstance(i Instance, newName string, op *operations.Operation) error + DeleteInstance(i Instance, op *operations.Operation) error + + MigrateInstance(i Instance, snapshots bool, args migration.SourceArgs) (migration.StorageSourceDriver, error) + RefreshInstance(i Instance, src Instance, snapshots bool, op *operations.Operation) error + BackupInstance(i Instance, targetPath string, optimized bool, snapshots bool, op *operations.Operation) error + + GetInstanceUsage(i Instance) (uint64, error) + SetInstanceQuota(i Instance, quota uint64) error + + MountInstance(i Instance) (bool, error) + UnmountInstance(i Instance) (bool, error) + GetInstanceDisk(i Instance) (string, string, error) + + // Instance snapshots + CreateInstanceSnapshot(i Instance, name string, op *operations.Operation) error + RenameInstanceSnapshot(i Instance, newName string, op *operations.Operation) error + DeleteInstanceSnapshot(i Instance, op *operations.Operation) error + + RestoreInstanceSnapshot(i Instance, op *operations.Operation) error + + MountInstanceSnapshot(i Instance) (bool, error) + UnmountInstanceSnapshot(i Instance) (bool, error) + + // Images + CreateImage(img api.Image, op *operations.Operation) error + DeleteImage(img api.Image, op *operations.Operation) error + + // Custom volumes + CreateCustomVolume(vol api.StorageVolume, op *operations.Operation) error + CreateCustomVolumeFromCopy(vol api.StorageVolume, src api.StorageVolume, snapshots bool, op *operations.Operation) error + CreateCustomVolumeFromMigration(vol api.StorageVolume, conn *websocket.Conn, args migration.SinkArgs, op *operations.Operation) error + RenameCustomVolume(vol api.StorageVolume, newName string, op *operations.Operation) error + DeleteCustomVolume(vol api.StorageVolume, op *operations.Operation) error + + MigrateCustomVolume(vol api.StorageVolume, snapshots bool, args migration.SourceArgs) (migration.StorageSourceDriver, error) + + GetCustomVolumeUsage(vol api.StorageVolume) (uint64, error) + SetCustomVolumeQuota(vol api.StorageVolume, quota uint64) error + + MountCustomVolume(vol api.StorageVolume) (bool, error) + UnmountCustomVolume(vol api.StorageVolume) (bool, error) + + // Custom volume snapshots + CreateCustomVolumeSnapshot(vol api.StorageVolume, name string, op *operations.Operation) error + RenameCustomVolumeSnapshot(vol api.StorageVolume, newName string, op *operations.Operation) error + DeleteCustomVolumeSnapshot(vol api.StorageVolume, op *operations.Operation) error +}
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel