The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/3697
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) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 6c7605ef5c652abcbed349169cea0c943a30d916 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Fri, 18 Aug 2017 20:22:18 +0200 Subject: [PATCH 1/4] storage: fix "size" property storage pools: - the "size" property is not available for the dir storage driver storage volumes: - defaule "size" property can only be set for the lvm and ceph storage driver Closes #3679. Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- lxd/storage_pools_config.go | 5 ++--- lxd/storage_volumes_config.go | 5 +---- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/lxd/storage_pools_config.go b/lxd/storage_pools_config.go index 197497fce..8e2c75190 100644 --- a/lxd/storage_pools_config.go +++ b/lxd/storage_pools_config.go @@ -149,12 +149,11 @@ func storagePoolValidateConfig(name string, driver string, config map[string]str } func storagePoolFillDefault(name string, driver string, config map[string]string) error { - if driver == "dir" || driver == "ceph" { + if driver == "dir" { if config["size"] != "" { return fmt.Errorf("the \"size\" property does not apply to %s storage pools", driver) } - } - if driver != "dir" && driver != "ceph" { + } else { if config["size"] == "" { st := syscall.Statfs_t{} err := syscall.Statfs(shared.VarPath(), &st) diff --git a/lxd/storage_volumes_config.go b/lxd/storage_volumes_config.go index c74bd0b72..d44ae1ea7 100644 --- a/lxd/storage_volumes_config.go +++ b/lxd/storage_volumes_config.go @@ -74,7 +74,7 @@ func storageVolumeValidateConfig(name string, config map[string]string, parentPo } func storageVolumeFillDefault(name string, config map[string]string, parentPool *api.StoragePool) error { - if parentPool.Driver == "dir" || parentPool.Driver == "ceph" { + if parentPool.Driver == "dir" { config["size"] = "" } else if parentPool.Driver == "lvm" || parentPool.Driver == "ceph" { if config["block.filesystem"] == "" { @@ -106,10 +106,7 @@ func storageVolumeFillDefault(name string, config map[string]string, parentPool if err != nil { return err } - } else { - config["size"] = "10GB" } - } return nil From 7ab86a27fd2cf8ddb9193746ae4ef64209c93f40 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Fri, 18 Aug 2017 20:28:18 +0200 Subject: [PATCH 2/4] storage: non-functional changes Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- lxd/storage_pools_config.go | 4 ++-- lxd/storage_volumes_config.go | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lxd/storage_pools_config.go b/lxd/storage_pools_config.go index 8e2c75190..b6fffdc25 100644 --- a/lxd/storage_pools_config.go +++ b/lxd/storage_pools_config.go @@ -151,14 +151,14 @@ func storagePoolValidateConfig(name string, driver string, config map[string]str func storagePoolFillDefault(name string, driver string, config map[string]string) error { if driver == "dir" { if config["size"] != "" { - return fmt.Errorf("the \"size\" property does not apply to %s storage pools", driver) + return fmt.Errorf("The \"size\" property does not apply to %s storage pools", driver) } } else { if config["size"] == "" { st := syscall.Statfs_t{} err := syscall.Statfs(shared.VarPath(), &st) if err != nil { - return fmt.Errorf("couldn't statfs %s: %s", shared.VarPath(), err) + return fmt.Errorf("Couldn't statfs %s: %s", shared.VarPath(), err) } /* choose 15 GB < x < 100GB, where x is 20% of the disk size */ diff --git a/lxd/storage_volumes_config.go b/lxd/storage_volumes_config.go index d44ae1ea7..37ac53877 100644 --- a/lxd/storage_volumes_config.go +++ b/lxd/storage_volumes_config.go @@ -93,10 +93,12 @@ func storageVolumeFillDefault(name string, config map[string]string, parentPool config["block.mount_options"] = "discard" } + // Does the pool request a default size for new storage volumes? if config["size"] == "0" || config["size"] == "" { config["size"] = parentPool.Config["volume.size"] } - + // Does the user explicitly request a default size for new + // storage volumes? if config["size"] == "0" || config["size"] == "" { config["size"] = "10GB" } From 7af4e9919bd12f236b7e6efe802b3fbe013724a3 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Fri, 18 Aug 2017 20:28:33 +0200 Subject: [PATCH 3/4] storage: enable "volume.size" for {btrfs,zfs} Closes #3679. Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- lxd/storage_pools_config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxd/storage_pools_config.go b/lxd/storage_pools_config.go index b6fffdc25..cc429186a 100644 --- a/lxd/storage_pools_config.go +++ b/lxd/storage_pools_config.go @@ -191,7 +191,7 @@ func storagePoolFillDefault(name string, driver string, config map[string]string } } - if driver == "lvm" || driver == "ceph" { + if driver == "btrfs" || driver == "ceph" || driver == "lvm" || driver == "zfs" { if config["volume.size"] != "" { _, err := shared.ParseByteSizeString(config["volume.size"]) if err != nil { From eae4a025d4677b47fce7e15ec5d51f2ede714e6f Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Mon, 21 Aug 2017 15:18:29 +0200 Subject: [PATCH 4/4] patches: unset "size" for ZFS containers + images Closes #3679. Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- lxd/patches.go | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/lxd/patches.go b/lxd/patches.go index b345ab6dd..11bb573e0 100644 --- a/lxd/patches.go +++ b/lxd/patches.go @@ -46,6 +46,7 @@ var patches = []patch{ {name: "storage_api_lvm_detect_lv_size", run: patchStorageApiDetectLVSize}, {name: "storage_api_insert_zfs_driver", run: patchStorageApiInsertZfsDriver}, {name: "storage_zfs_noauto", run: patchStorageZFSnoauto}, + {name: "storage_zfs_volume_size", run: patchStorageZFSVolumeSize}, } type patch struct { @@ -2321,6 +2322,72 @@ func patchStorageZFSnoauto(name string, d *Daemon) error { return nil } +func patchStorageZFSVolumeSize(name string, d *Daemon) error { + pools, err := db.StoragePools(d.db) + if err != nil && err == db.NoSuchObjectError { + // No pool was configured in the previous update. So we're on a + // pristine LXD instance. + return nil + } else if err != nil { + // Database is screwed. + logger.Errorf("Failed to query database: %s", err) + return err + } + + for _, poolName := range pools { + poolID, pool, err := db.StoragePoolGet(d.db, poolName) + if err != nil { + logger.Errorf("Failed to query database: %s", err) + return err + } + + // We only care about zfs + if pool.Driver != "zfs" { + continue + } + + // Get all storage volumes on the storage pool. + volumes, err := db.StoragePoolVolumesGet(d.db, poolID, supportedVolumeTypes) + if err != nil { + if err == db.NoSuchObjectError { + continue + } + return err + } + + for _, volume := range volumes { + if volume.Type != "container" && volume.Type != "image" { + continue + } + + // ZFS storage volumes for containers and images should + // never have a size property set directly on the + // storage volume itself. For containers the size + // property is regulated either via a profiles root disk + // device size property or via the containers local + // root disk device size property. So unset it here + // unconditionally. + if volume.Config["size"] != "" { + volume.Config["size"] = "" + } + + // It shouldn't be possible that false volume types + // exist in the db, so it's safe to ignore the error. + volumeType, _ := storagePoolVolumeTypeNameToType(volume.Type) + // Update the volume config. + err = db.StoragePoolVolumeUpdate(d.db, volume.Name, + volumeType, poolID, volume.Description, + volume.Config) + if err != nil { + return err + } + } + + } + + return nil +} + // Patches end here // Here are a couple of legacy patches that were originally in
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel