From 2993ddb82cd19c323e52ef44d094e5dc5c728d8a Mon Sep 17 00:00:00 2001 From: Andy Lee Date: Wed, 16 Apr 2025 16:09:33 +0800 Subject: [PATCH] fix unable to detach PCI & USB device in VM edit page (#247) * fix unable to detach PCI & USB device in VM edit page Signed-off-by: Andy Lee * refactor based on comment Signed-off-by: Andy Lee * using set from shell/utils/object Signed-off-by: Andy Lee --------- Signed-off-by: Andy Lee --- .../VirtualMachinePciDevices/index.vue | 4 +--- .../VirtualMachineUSBDevices/index.vue | 4 +--- .../edit/kubevirt.io.virtualmachine/index.vue | 12 ++++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachinePciDevices/index.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachinePciDevices/index.vue index d6e75a31..4db1987d 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachinePciDevices/index.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachinePciDevices/index.vue @@ -101,9 +101,7 @@ export default { ...formatted, ]; - if (devices.length > 0) { - set(this.value.domain.devices, 'hostDevices', devices); - } + set(this.value.domain.devices, 'hostDevices', devices); } }, diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineUSBDevices/index.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineUSBDevices/index.vue index 72dec502..56646a96 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineUSBDevices/index.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/VirtualMachineUSBDevices/index.vue @@ -84,9 +84,7 @@ export default { ...formatted, ]; - if (devices.length > 0) { - set(this.value.domain.devices, 'hostDevices', devices); - } + set(this.value.domain.devices, 'hostDevices', devices); } }, diff --git a/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue b/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue index d1fdfd45..b985a9b3 100644 --- a/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue +++ b/pkg/harvester/edit/kubevirt.io.virtualmachine/index.vue @@ -2,7 +2,7 @@ import { isEqual } from 'lodash'; import { mapGetters } from 'vuex'; import Tabbed from '@shell/components/Tabbed'; -import { clone } from '@shell/utils/object'; +import { clone, set } from '@shell/utils/object'; import Tab from '@shell/components/Tabbed/Tab'; import { Checkbox } from '@components/Form/Checkbox'; import CruResource from '@shell/components/CruResource'; @@ -16,7 +16,6 @@ import PodAffinity from '@shell/components/form/PodAffinity'; import VGpuDevices from './VirtualMachineVGpuDevices/index'; import UsbDevices from './VirtualMachineUSBDevices/index'; import KeyValue from '@shell/components/form/KeyValue'; - import { clear } from '@shell/utils/array'; import { saferDump } from '@shell/utils/create-yaml'; import { exceptionToErrorsArray } from '@shell/utils/error'; @@ -412,12 +411,21 @@ export default { } const cloneDeepNewVM = clone(this.value); + // new VM delete cloneDeepNewVM?.metadata; delete cloneDeepNewVM?.__clone; + // old VM delete this.cloneVM?.metadata; delete this.cloneVM?.__clone; + // add empty hostDevices to old VM as CRD does not have it. + const devicesObj = this.cloneVM?.spec?.template?.spec?.domain?.devices; + + if (devicesObj && devicesObj.hostDevices === undefined) { + set(devicesObj, 'hostDevices', []); + } + const oldVM = JSON.parse(JSON.stringify(this.cloneVM)); const newVM = JSON.parse(JSON.stringify(cloneDeepNewVM));