From 7d1a1b04f0987d55f6588491bede839f032a441b Mon Sep 17 00:00:00 2001 From: Tim Serong Date: Tue, 27 Aug 2024 17:33:15 +1000 Subject: [PATCH] Take image virtual size into account when creating Volumes This is a followup to https://github.com/harvester/dashboard/pull/1104 When creating new volumes on the Volume screen in Harvester, the default size is empty, i.e. it's not pre-filled with anything at all. If the source is set to "VM image" we can now take the image virtual size and use that as the default size for the volume. Unlike when creating VMs (which always set the volume to a minimum of 10GiB regardless of virtual size, for consistency with earlier harvester versions), on this screen we just use the virtual size as-is. If the user wants to make it bigger, they can. Related issue: https://github.com/harvester/harvester/issues/4905 Signed-off-by: Tim Serong Co-authored-by: Volker Theile (cherry picked from commit 37785525e4b63b5bb079ac06d94d446e0c4fda97) --- pkg/harvester/edit/harvesterhci.io.volume.vue | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pkg/harvester/edit/harvesterhci.io.volume.vue b/pkg/harvester/edit/harvesterhci.io.volume.vue index 5c8c41967ee..fb3289b4fc1 100644 --- a/pkg/harvester/edit/harvesterhci.io.volume.vue +++ b/pkg/harvester/edit/harvesterhci.io.volume.vue @@ -56,6 +56,7 @@ export default { const hash = await allHash(_hash); this.snapshots = hash.snapshots; + this.images = hash.images; const defaultStorage = this.$store.getters[`harvester/all`](STORAGE_CLASS).find( O => O.isDefault); @@ -77,6 +78,7 @@ export default { storage, imageId, snapshots: [], + images: [], }; }, @@ -108,10 +110,8 @@ export default { }, imageOption() { - const choices = this.$store.getters['harvester/all'](HCI.IMAGE); - return sortBy( - choices + this.images .filter(obj => obj.isReady) .map((obj) => { return { @@ -249,7 +249,17 @@ export default { this.$set(this.value, 'spec', spec); }, + updateImage() { + if (this.isVMImage && this.imageId) { + const imageResource = this.images?.find(image => this.imageId === image.id); + const imageSize = Math.max(imageResource?.status?.size, imageResource?.status?.virtualSize); + if (imageSize) { + this.storage = `${ Math.ceil(imageSize / 1024 / 1024 / 1024) }Gi`; + } + } + this.update(); + }, generateYaml() { const out = saferDump(this.value); @@ -300,7 +310,7 @@ export default { required :mode="mode" class="mb-20" - @input="update" + @input="updateImage" />