From 7ecc9c320d88a5b0d3ba3c91da3ef6f75ee99dc2 Mon Sep 17 00:00:00 2001 From: Yiya Chen Date: Mon, 2 Jun 2025 12:38:04 +0800 Subject: [PATCH] fix: VM's machine type options is not support (#307) * feat: get options from API Signed-off-by: Yi-Ya Chen * feat: add feature flag Signed-off-by: Yi-Ya Chen * refactor: remove default value Signed-off-by: Yi-Ya Chen * refactor: fallback to none Signed-off-by: Yi-Ya Chen --------- Signed-off-by: Yi-Ya Chen --- pkg/harvester/config/feature-flags.js | 4 +++- .../edit/kubevirt.io.virtualmachine/index.vue | 12 +++++------- pkg/harvester/mixins/harvester-vm/index.js | 7 ++++++- pkg/harvester/models/kubevirt.io.virtualmachine.js | 4 ++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/pkg/harvester/config/feature-flags.js b/pkg/harvester/config/feature-flags.js index 1f305d04..9b91f63a 100644 --- a/pkg/harvester/config/feature-flags.js +++ b/pkg/harvester/config/feature-flags.js @@ -37,7 +37,9 @@ const FEATURE_FLAGS = { 'liveMigrationProgress' ], 'v1.5.1': [], - 'v1.6.0': [] + 'v1.6.0': [ + 'vmMachineTypes' + ] }; const generateFeatureFlags = () => { diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue index 26fb9bd5..12632d31 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue @@ -114,13 +114,11 @@ export default { }, machineTypeOptions() { - return [{ - label: 'None', - value: '' - }, { - label: 'q35', - value: 'q35' - }]; + return this.machineTypes.map((type) => { + if (!type) return { label: 'None', value: '' }; + + return { label: type, value: type }; + }); }, templateOptions() { diff --git a/pkg/harvester/mixins/harvester-vm/index.js b/pkg/harvester/mixins/harvester-vm/index.js index 479b4e35..3d7879e0 100644 --- a/pkg/harvester/mixins/harvester-vm/index.js +++ b/pkg/harvester/mixins/harvester-vm/index.js @@ -157,6 +157,7 @@ export default { diskRows: [], networkRows: [], machineType: '', + machineTypes: [], secretName: '', secretRef: null, showAdvanced: false, @@ -295,6 +296,9 @@ export default { async created() { await this.$store.dispatch(`${ this.inStore }/findAll`, { type: SECRET }); + const machineTypes = this.value.vmMachineTypesFeatureEnabled ? await this.$store.dispatch('harvester/request', { url: '/v1/harvester/clusters/local?link=machineTypes' }) : ['']; + + this.machineTypes = machineTypes; this.getInitConfig({ value: this.value, init: this.isCreate }); }, @@ -331,7 +335,8 @@ export default { const maintenanceStrategy = vm.metadata.labels?.[HCI_ANNOTATIONS.VM_MAINTENANCE_MODE_STRATEGY] || 'Migrate'; const runStrategy = spec.runStrategy || 'RerunOnFailure'; - const machineType = value.machineType; + const machineType = spec.template.spec.domain?.machine?.type || this.machineTypes[0]; + const cpu = spec.template.spec.domain?.cpu?.cores; const memory = spec.template.spec.domain.resources.limits.memory; const reservedMemory = vm.metadata?.annotations?.[HCI_ANNOTATIONS.VM_RESERVED_MEMORY]; diff --git a/pkg/harvester/models/kubevirt.io.virtualmachine.js b/pkg/harvester/models/kubevirt.io.virtualmachine.js index 441eccbb..d85ea8ea 100644 --- a/pkg/harvester/models/kubevirt.io.virtualmachine.js +++ b/pkg/harvester/models/kubevirt.io.virtualmachine.js @@ -1205,6 +1205,10 @@ export default class VirtVm extends HarvesterResource { return this.$rootGetters['harvester-common/getFeatureEnabled']('thirdPartyStorage'); } + get vmMachineTypesFeatureEnabled() { + return this.$rootGetters['harvester-common/getFeatureEnabled']('vmMachineTypes'); + } + setInstanceLabels(val) { if ( !this.spec?.template?.metadata?.labels ) { set(this, 'spec.template.metadata.labels', {});