From ef2b4d1589620270e98ec6471c18ca365d27bfc3 Mon Sep 17 00:00:00 2001 From: Yiya Chen Date: Thu, 17 Jul 2025 18:29:02 +0800 Subject: [PATCH] feat: disable vm volume resize (#409) Signed-off-by: Yi-Ya Chen --- .../VirtualMachineVolume/index.vue | 14 +++++++++++++- .../VirtualMachineVolume/type/vmImage.vue | 13 +++++++------ .../VirtualMachineVolume/type/volume.vue | 13 +++++++------ 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue index fe9c725e..cd74d434 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/index.vue @@ -17,6 +17,7 @@ import { SOURCE_TYPE } from '../../../config/harvester-map'; import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../../config/harvester'; import { HCI } from '../../../types'; import { VOLUME_MODE } from '@pkg/harvester/config/types'; +import { OFF } from '../../../models/kubevirt.io.virtualmachine'; export default { emits: ['update:value'], @@ -266,7 +267,17 @@ export default { isLonghornV2(volume) { return volume?.pvc?.isLonghornV2 || volume?.pvc?.storageClass?.isLonghornV2; - } + }, + + isResizeDisabled(volume) { + if (this.isCreate) return false; + if (volume.newCreateId) return false; + + const isStopped = this.vm.stateDisplay === OFF; + const isLonghornV2 = this.isLonghornV2(volume); + + return !isStopped || isLonghornV2; + }, }, }; @@ -347,6 +358,7 @@ export default { :is-edit="isEdit" :is-view="isView" :is-virtual-type="isVirtualType" + :is-resize-disabled="isResizeDisabled(rows[i])" :mode="mode" :idx="i" :validate-required="validateRequired" diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue index 16d7da43..e136ce0c 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/vmImage.vue @@ -64,7 +64,12 @@ export default { isVirtualType: { type: Boolean, default: true - } + }, + + isResizeDisabled: { + type: Boolean, + default: false + }, }, data() { @@ -135,10 +140,6 @@ export default { return this.$store.getters['harvester-common/getFeatureEnabled']('thirdPartyStorage'); }, - isLonghornV2() { - return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2; - }, - selectedImage() { return this.$store.getters['harvester/all'](HCI.IMAGE)?.find( (I) => this.value.image === I.id); }, @@ -350,7 +351,7 @@ export default { :label="t('harvester.fields.size')" :mode="mode" :required="validateRequired" - :disable="isLonghornV2" + :disabled="isResizeDisabled" :suffix="GIBIBYTE" @update:value="update" /> diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue index 0a4f2cd0..7d40135c 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineVolume/type/volume.vue @@ -56,7 +56,12 @@ export default { isVirtualType: { type: Boolean, default: true - } + }, + + isResizeDisabled: { + type: Boolean, + default: false + }, }, data() { @@ -135,10 +140,6 @@ export default { }) || []; }, - isLonghornV2() { - return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2; - }, - isLonghornStorageClass() { const selectedSC = this.storageClasses.find((sc) => sc.name === this.value?.storageClassName) || {}; @@ -310,7 +311,7 @@ export default { :mode="mode" :required="validateRequired" :label="t('harvester.fields.size')" - :disabled="isLonghornV2" + :disabled="isResizeDisabled" :suffix="GIBIBYTE" @update:value="update" />