Refactoring devices models

Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
This commit is contained in:
Francesco Torchia 2024-09-17 21:59:12 +02:00
parent 890686741f
commit 2ec5ebb373
No known key found for this signature in database
GPG Key ID: E6D011B7415D4393
4 changed files with 31 additions and 45 deletions

View File

@ -7,7 +7,7 @@ import CompatibilityMatrix from '../CompatibilityMatrix';
import DeviceList from './DeviceList'; import DeviceList from './DeviceList';
import remove from 'lodash/remove'; import remove from 'lodash/remove';
import { get, set } from '@shell/utils/object'; import { set } from '@shell/utils/object';
import { HCI } from '../../../types'; import { HCI } from '../../../types';
import DeviceList from './DeviceList'; import DeviceList from './DeviceList';
import CompatibilityMatrix from './CompatibilityMatrix'; import CompatibilityMatrix from './CompatibilityMatrix';
@ -123,9 +123,8 @@ export default {
if (vm.metadata.name === this.vm?.metadata?.name) { if (vm.metadata.name === this.vm?.metadata?.name) {
return inUse; return inUse;
} }
const devices = get(vm, 'spec.template.spec.domain.devices.hostDevices') || [];
devices.forEach((device) => { vm.hostDevices.forEach((device) => {
inUse[device.name] = { usedBy: [vm.metadata.name] }; inUse[device.name] = { usedBy: [vm.metadata.name] };
}); });
@ -136,19 +135,14 @@ export default {
}, },
devicesByNode() { devicesByNode() {
const out = {}; return this.enabledDevices?.reduce((acc, device) => {
const name = device.status?.nodeName;
this.enabledDevices.forEach((deviceCRD) => { return name ? {
const nodeName = deviceCRD.status?.nodeName; ...acc,
[name]: [...(acc[name] || []), device],
if (!out[nodeName]) { } : acc;
out[nodeName] = [deviceCRD]; }, {});
} else {
out[nodeName].push(deviceCRD);
}
});
return out;
}, },
// determine which nodes contain all devices selected // determine which nodes contain all devices selected

View File

@ -9,7 +9,7 @@ import CompatibilityMatrix from '../CompatibilityMatrix';
import DeviceList from './DeviceList'; import DeviceList from './DeviceList';
import remove from 'lodash/remove'; import remove from 'lodash/remove';
import { get, set } from '@shell/utils/object'; import { set } from '@shell/utils/object';
export default { export default {
name: 'VirtualMachineUSBDevices', name: 'VirtualMachineUSBDevices',
@ -120,9 +120,8 @@ export default {
if (vm.metadata.name === this.vm?.metadata?.name) { if (vm.metadata.name === this.vm?.metadata?.name) {
return inUse; return inUse;
} }
const devices = get(vm, 'spec.template.spec.domain.devices.hostDevices') || [];
devices.forEach((device) => { vm.hostDevices.forEach((device) => {
inUse[device.name] = { usedBy: [vm.metadata.name] }; inUse[device.name] = { usedBy: [vm.metadata.name] };
}); });
@ -133,19 +132,14 @@ export default {
}, },
devicesByNode() { devicesByNode() {
const out = {}; return this.enabledDevices?.reduce((acc, device) => {
const name = device.status?.nodeName;
this.enabledDevices.forEach((deviceCRD) => { return name ? {
const nodeName = deviceCRD.status?.nodeName; ...acc,
[name]: [...(acc[name] || []), device],
if (!out[nodeName]) { } : acc;
out[nodeName] = [deviceCRD]; }, {});
} else {
out[nodeName].push(deviceCRD);
}
});
return out;
}, },
compatibleNodes() { compatibleNodes() {

View File

@ -5,7 +5,7 @@ import LabeledSelect from '@shell/components/form/LabeledSelect';
import Banner from '@components/Banner/Banner.vue'; import Banner from '@components/Banner/Banner.vue';
import remove from 'lodash/remove'; import remove from 'lodash/remove';
import { get, set } from '@shell/utils/object'; import { set } from '@shell/utils/object';
import { HCI } from '../../../types'; import { HCI } from '../../../types';
import VGpuDeviceList from './VGpuDeviceList'; import VGpuDeviceList from './VGpuDeviceList';
@ -89,9 +89,8 @@ export default {
if (vm.metadata.name === this.vm?.metadata?.name) { if (vm.metadata.name === this.vm?.metadata?.name) {
return inUse; return inUse;
} }
const devices = get(vm, 'spec.template.spec.domain.devices.hostDevices') || [];
devices.forEach((device) => { vm.hostDevices.forEach((device) => {
inUse[device.name] = { usedBy: [vm.metadata.name] }; inUse[device.name] = { usedBy: [vm.metadata.name] };
}); });
@ -102,19 +101,14 @@ export default {
}, },
devicesByNode() { devicesByNode() {
const out = {}; return this.enabledDevices?.reduce((acc, device) => {
const name = device.spec?.nodeName;
this.enabledDevices.forEach((deviceCRD) => { return name ? {
const nodeName = deviceCRD.spec?.nodeName; ...acc,
[name]: [...(acc[name] || []), device],
if (!out[nodeName]) { } : acc;
out[nodeName] = [deviceCRD]; }, {});
} else {
out[nodeName].push(deviceCRD);
}
});
return out;
}, },
compatibleNodes() { compatibleNodes() {

View File

@ -1078,6 +1078,10 @@ export default class VirtVm extends HarvesterResource {
}); });
} }
get hostDevices() {
return this.spec?.template?.spec?.domain?.devices?.hostDevices || [];
}
setInstanceLabels(val) { setInstanceLabels(val) {
if ( !this.spec?.template?.metadata?.labels ) { if ( !this.spec?.template?.metadata?.labels ) {
set(this, 'spec.template.metadata.labels', {}); set(this, 'spec.template.metadata.labels', {});