feat: disable vm volume resize (#409)

Signed-off-by: Yi-Ya Chen <yiya.chen@suse.com>
This commit is contained in:
Yiya Chen 2025-07-17 18:29:02 +08:00 committed by GitHub
parent a73e9f0ac1
commit ef2b4d1589
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 27 additions and 13 deletions

View File

@ -17,6 +17,7 @@ import { SOURCE_TYPE } from '../../../config/harvester-map';
import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../../config/harvester'; import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../../config/harvester';
import { HCI } from '../../../types'; import { HCI } from '../../../types';
import { VOLUME_MODE } from '@pkg/harvester/config/types'; import { VOLUME_MODE } from '@pkg/harvester/config/types';
import { OFF } from '../../../models/kubevirt.io.virtualmachine';
export default { export default {
emits: ['update:value'], emits: ['update:value'],
@ -266,7 +267,17 @@ export default {
isLonghornV2(volume) { isLonghornV2(volume) {
return volume?.pvc?.isLonghornV2 || volume?.pvc?.storageClass?.isLonghornV2; 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;
},
}, },
}; };
</script> </script>
@ -347,6 +358,7 @@ export default {
:is-edit="isEdit" :is-edit="isEdit"
:is-view="isView" :is-view="isView"
:is-virtual-type="isVirtualType" :is-virtual-type="isVirtualType"
:is-resize-disabled="isResizeDisabled(rows[i])"
:mode="mode" :mode="mode"
:idx="i" :idx="i"
:validate-required="validateRequired" :validate-required="validateRequired"

View File

@ -64,7 +64,12 @@ export default {
isVirtualType: { isVirtualType: {
type: Boolean, type: Boolean,
default: true default: true
} },
isResizeDisabled: {
type: Boolean,
default: false
},
}, },
data() { data() {
@ -135,10 +140,6 @@ export default {
return this.$store.getters['harvester-common/getFeatureEnabled']('thirdPartyStorage'); return this.$store.getters['harvester-common/getFeatureEnabled']('thirdPartyStorage');
}, },
isLonghornV2() {
return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2;
},
selectedImage() { selectedImage() {
return this.$store.getters['harvester/all'](HCI.IMAGE)?.find( (I) => this.value.image === I.id); 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')" :label="t('harvester.fields.size')"
:mode="mode" :mode="mode"
:required="validateRequired" :required="validateRequired"
:disable="isLonghornV2" :disabled="isResizeDisabled"
:suffix="GIBIBYTE" :suffix="GIBIBYTE"
@update:value="update" @update:value="update"
/> />

View File

@ -56,7 +56,12 @@ export default {
isVirtualType: { isVirtualType: {
type: Boolean, type: Boolean,
default: true default: true
} },
isResizeDisabled: {
type: Boolean,
default: false
},
}, },
data() { data() {
@ -135,10 +140,6 @@ export default {
}) || []; }) || [];
}, },
isLonghornV2() {
return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2;
},
isLonghornStorageClass() { isLonghornStorageClass() {
const selectedSC = this.storageClasses.find((sc) => sc.name === this.value?.storageClassName) || {}; const selectedSC = this.storageClasses.find((sc) => sc.name === this.value?.storageClassName) || {};
@ -310,7 +311,7 @@ export default {
:mode="mode" :mode="mode"
:required="validateRequired" :required="validateRequired"
:label="t('harvester.fields.size')" :label="t('harvester.fields.size')"
:disabled="isLonghornV2" :disabled="isResizeDisabled"
:suffix="GIBIBYTE" :suffix="GIBIBYTE"
@update:value="update" @update:value="update"
/> />