Lint fixes

Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
This commit is contained in:
Francesco Torchia
2024-11-12 11:50:20 +01:00
parent 19b11aac2c
commit 4626d56acd
214 changed files with 3162 additions and 1298 deletions
@@ -82,16 +82,28 @@ export default {
</div>
<div>{{ t('harvester.devices.matrixHostName') }}</div>
</div>
<div v-for="(nodeName, i) in allNodeNames" :key="i" >
<div
v-for="(nodeName, i) in allNodeNames"
:key="i"
>
<span> {{ nodeName }}</span>
</div>
</div>
<div v-for="(deviceCRD, i) in enabledDevices" :key="i" >
<div v-clean-tooltip="deviceTooltip(deviceCRD)" class="compat-cell device-label" :class="{'text-muted': noneAvailable(deviceCRD)}">
<div
v-for="(deviceCRD, i) in enabledDevices"
:key="i"
>
<div
v-clean-tooltip="deviceTooltip(deviceCRD)"
class="compat-cell device-label"
:class="{'text-muted': noneAvailable(deviceCRD)}"
>
{{ deviceCRD.metadata.name }}
</div>
<div
v-for="(nodeName, k) in allNodeNames" :key="k" class="compat-cell"
v-for="(nodeName, k) in allNodeNames"
:key="k"
class="compat-cell"
:class="{'has-device': nodeHasDevice(nodeName, deviceCRD)}"
/>
</div>
@@ -11,7 +11,7 @@ const _NEW = '_NEW';
export default {
emits: ['update:user', 'update:newUser'],
components: {
LabeledInput,
LabeledSelect,
@@ -14,7 +14,7 @@ const _NEW = '_NEW';
export default {
emits: ['update:value'],
components: {
Banner,
InfoBox
@@ -152,11 +152,23 @@ export default {
<template>
<div>
<Banner class="mb-20" color="info" :label="t('harvester.virtualMachine.accessCredentials.tips')" />
<Banner
class="mb-20"
color="info"
:label="t('harvester.virtualMachine.accessCredentials.tips')"
/>
<div v-for="(row, i) in rows" :key="i">
<div
v-for="(row, i) in rows"
:key="i"
>
<InfoBox class="volume-source">
<button v-if="isEdit" type="button" class="role-link btn btn-sm remove-vol" @click="remove(row)">
<button
v-if="isEdit"
type="button"
class="role-link btn btn-sm remove-vol"
@click="remove(row)"
>
<i class="icon icon-x" />
</button>
<h3>
@@ -169,7 +181,7 @@ export default {
:is="componentFor(row.source)"
v-model:value="rows[i]"
:rows="rows"
:resourceType="resourceType"
:resource-type="resourceType"
:user-options="userOptions"
:mode="mode"
:idx="i"
@@ -180,7 +192,10 @@ export default {
</InfoBox>
</div>
<div v-if="isEdit && isQemuInstalled" class="mt-20">
<div
v-if="isEdit && isQemuInstalled"
class="mt-20"
>
<button
type="button"
class="btn btn-sm bg-primary mr-15 mb-10"
@@ -3,10 +3,10 @@ import Password from '@shell/components/form/Password';
import AccessCredentialsUsers from '../AccessCredentialsUsers';
export default {
name: 'HarvesterEditVolume',
name: 'HarvesterEditVolume',
emits: ['update', 'update:newUser'],
components: { Password, AccessCredentialsUsers },
props: {
@@ -64,11 +64,14 @@ export default {
</script>
<template>
<div class="row" @update:value="update">
<div
class="row"
@update:value="update"
>
<div class="col span-6">
<AccessCredentialsUsers
v-model:value="value.username"
:resourceType="resourceType"
:resource-type="resourceType"
:user-options="userOptions"
:multiple="false"
:mode="mode"
@@ -3,7 +3,7 @@ import SSHKey from '../../VirtualMachineSSHKey';
import AccessCredentialsUsers from '../AccessCredentialsUsers';
export default {
name: 'HarvesterEditVolume',
name: 'HarvesterEditVolume',
emits: ['update', 'update:newUser'],
@@ -65,7 +65,7 @@ export default {
<div class="col span-6">
<AccessCredentialsUsers
v-model:value="value.users"
:resourceType="resourceType"
:resource-type="resourceType"
:user-options="userOptions"
:mode="mode"
:multiple="true"
@@ -114,7 +114,10 @@ export default {
<div class="mb-20">
<h3>{{ t(`harvester.virtualMachine.cloudConfig.${type}.title`) }}</h3>
<p class="text-muted mb-20">
<t :k="`harvester.virtualMachine.cloudConfig.${type}.tip`" :raw="true" />
<t
:k="`harvester.virtualMachine.cloudConfig.${type}.tip`"
:raw="true"
/>
</p>
<LabeledSelect
@@ -14,7 +14,7 @@ const _NEW = '_NEW';
export default {
emits: ['updateUserData', 'updateNetworkData', 'updateDataTemplateId'],
components: {
DataTemplate, YamlEditor, LabeledInput, ModalWithCard
},
@@ -3,10 +3,10 @@ import UnitInput from '@shell/components/form/UnitInput';
import InputOrDisplay from '@shell/components/InputOrDisplay';
export default {
name: 'HarvesterEditCpuMemory',
name: 'HarvesterEditCpuMemory',
emits: ['updateCpuMemory'],
components: { UnitInput, InputOrDisplay },
props: {
@@ -78,7 +78,11 @@ export default {
<template>
<div class="row">
<div class="col span-6 mb-10">
<InputOrDisplay name="CPU" :value="cupDisplay" :mode="mode">
<InputOrDisplay
name="CPU"
:value="cupDisplay"
:mode="mode"
>
<UnitInput
v-model:value="localCpu"
label="CPU"
@@ -94,7 +98,11 @@ export default {
</div>
<div class="col span-6 mb-10">
<InputOrDisplay :name="t('harvester.virtualMachine.input.memory')" :value="memoryDisplay" :mode="mode">
<InputOrDisplay
:name="t('harvester.virtualMachine.input.memory')"
:value="memoryDisplay"
:mode="mode"
>
<UnitInput
v-model:value="localMemory"
:label="t('harvester.virtualMachine.input.memory')"
@@ -28,10 +28,10 @@ const MODEL = [{
}];
export default {
name: 'HarvesterEditNetwork',
name: 'HarvesterEditNetwork',
emits: ['update'],
components: {
LabeledInput, LabeledSelect, InputOrDisplay
},
@@ -139,7 +139,7 @@ export default {
watch: {
rows: {
handler(neu) {
const hasManagementNetwork = !!neu.some(N => N.isPod);
const hasManagementNetwork = !!neu.some((N) => N.isPod);
this['hasManagementNetwork'] = hasManagementNetwork;
},
@@ -233,7 +233,10 @@ export default {
</div>
</div>
<div class="row" :class="{'mb-20': !isMasquerade}">
<div
class="row"
:class="{'mb-20': !isMasquerade}"
>
<div
data-testid="input-hen-networkName"
class="col span-6"
@@ -278,7 +281,10 @@ export default {
<div v-if="!isMasquerade && isSingle">
<div class="row mb-20">
<a role="button" @click="toggleAdvanced">
<a
role="button"
@click="toggleAdvanced"
>
{{ showAdvanced ? t('harvester.generic.hideMore') : t('harvester.generic.showMore') }}
</a>
</div>
@@ -109,7 +109,7 @@ export default {
while (hasUsed) {
name = `nic-${ this.nameIdx }`;
hasUsed = this.rows.find( O => O.name === name);
hasUsed = this.rows.find( (O) => O.name === name);
this.nameIdx++;
}
@@ -125,8 +125,16 @@ export default {
<template>
<div>
<InfoBox v-for="(row, i) in rows" :key="i">
<button v-if="!isView" type="button" class="role-link remove-vol" @click="remove(row)">
<InfoBox
v-for="(row, i) in rows"
:key="i"
>
<button
v-if="!isView"
type="button"
class="role-link remove-vol"
@click="remove(row)"
>
<i class="icon icon-x" />
</button>
@@ -142,7 +150,12 @@ export default {
/>
</InfoBox>
<button v-if="!isView" type="button" class="btn btn-sm bg-primary" @click="add">
<button
v-if="!isView"
type="button"
class="btn btn-sm bg-primary"
@click="add"
>
{{ t('harvester.virtualMachine.network.addNetwork') }}
</button>
</div>
@@ -131,7 +131,7 @@ export default {
});
},
groupIsAllEnabled(rows = []) {
return !rows.find(device => !device.passthroughClaim);
return !rows.find((device) => !device.passthroughClaim);
},
changeRows(filterRows, parentSriov) {
@@ -162,11 +162,25 @@ export default {
:rows-per-page="10"
>
<template #group-by="{group}">
<div :ref="group.key" v-trim-whitespace class="group-tab">
<button v-if="groupIsAllEnabled(group.rows)" type="button" class="btn btn-sm role-secondary mr-5" @click="e=>{disableGroup(group.rows); e.target.blur()}">
<div
:ref="group.key"
v-trim-whitespace
class="group-tab"
>
<button
v-if="groupIsAllEnabled(group.rows)"
type="button"
class="btn btn-sm role-secondary mr-5"
@click="e=>{disableGroup(group.rows); e.target.blur()}"
>
{{ t('harvester.pci.disableGroup') }}
</button>
<button v-else type="button" class="btn btn-sm role-secondary mr-5" @click="e=>{enableGroup(group.rows); e.target.blur()}">
<button
v-else
type="button"
class="btn btn-sm role-secondary mr-5"
@click="e=>{enableGroup(group.rows); e.target.blur()}"
>
{{ t('harvester.pci.enableGroup') }}
</button>
<span v-clean-html="group.key" />
@@ -174,7 +188,10 @@ export default {
</template>
<template #cell:claimed="{row}">
<span v-if="row.isEnabled">{{ row.claimedBy }}</span>
<span v-else class="text-muted">&mdash;</span>
<span
v-else
class="text-muted"
>&mdash;</span>
</template>
<template #more-header-middle>
<FilterBySriov
@@ -60,7 +60,7 @@ export default {
if (checkName && name.includes(checkName) && !otherDevices.includes(name)) {
oldFormatDevices.push(name);
} else if (this.enabledDevices.find(device => device?.metadata?.name === name)) {
} else if (this.enabledDevices.find((device) => device?.metadata?.name === name)) {
selectedDevices.push(name);
}
});
@@ -87,7 +87,7 @@ export default {
watch: {
selectedDevices(neu) {
const formatted = neu.map((selectedDevice) => {
const deviceCRD = this.enabledDevices.find(device => device.metadata.name === selectedDevice);
const deviceCRD = this.enabledDevices.find((device) => device.metadata.name === selectedDevice);
const deviceName = deviceCRD?.status?.resourceName;
return {
@@ -153,7 +153,7 @@ export default {
this.selectedDevices.forEach((deviceUid) => {
remove(out, (nodeName) => {
const device = this.enabledDevices.find(deviceCRD => deviceCRD.metadata.name === deviceUid);
const device = this.enabledDevices.find((deviceCRD) => deviceCRD.metadata.name === deviceUid);
return device.status.nodeName !== nodeName;
});
@@ -166,7 +166,7 @@ export default {
deviceOpts() {
const filteredOptions = this.enabledDevices.filter((deviceCRD) => {
if (this.selectedDevices.length > 0) {
const selectedDevice = this.enabledDevices.find(device => device.metadata.name === this.selectedDevices[0]);
const selectedDevice = this.enabledDevices.find((device) => device.metadata.name === this.selectedDevices[0]);
return !this.devicesInUse[deviceCRD?.metadata.name] && deviceCRD.status.nodeName === selectedDevice.status.nodeName;
}
@@ -192,13 +192,13 @@ export default {
methods: {
otherDevices(vmDevices) {
return vmDevices.filter(device => !this.pciDevices.find(pci => device.name === pci.name));
return vmDevices.filter((device) => !this.pciDevices.find((pci) => device.name === pci.name));
},
nodeNameFromUid(uid) {
for (const deviceUid in this.uniqueDevices) {
const nodes = this.uniqueDevices[deviceUid].nodes;
const thisNode = nodes.find(node => node.systemUUID === uid);
const thisNode = nodes.find((node) => node.systemUUID === uid);
if (thisNode) {
return thisNode.name;
@@ -227,7 +227,10 @@ export default {
<Banner color="info">
<t k="harvester.pci.howToUseDevice" />
</Banner>
<Banner v-if="selectedDevices.length > 0" color="info">
<Banner
v-if="selectedDevices.length > 0"
color="info"
>
<t k="harvester.pci.deviceInTheSameHost" />
</Banner>
</div>
@@ -250,28 +253,52 @@ export default {
</LabeledSelect>
</div>
</div>
<div v-if="compatibleNodes.length && selectedDevices.length" class="row">
<div
v-if="compatibleNodes.length && selectedDevices.length"
class="row"
>
<div class="col span-12 text-muted">
Compatible hosts:
<!-- eslint-disable-next-line vue/no-parsing-error -->
<span v-for="(node, idx) in compatibleNodes" :key="idx">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
<span
v-for="(node, idx) in compatibleNodes"
:key="idx"
>{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
</div>
</div>
<div v-else-if="selectedDevices.length" class="text-error">
<div
v-else-if="selectedDevices.length"
class="text-error"
>
{{ t('harvester.pci.impossibleSelection') }}
</div>
<button type="button" class="btn btn-sm role-link pl-0" @click="e=>{showMatrix = !showMatrix; e.target.blur()}">
<button
type="button"
class="btn btn-sm role-link pl-0"
@click="e=>{showMatrix = !showMatrix; e.target.blur()}"
>
{{ showMatrix ? t('harvester.pci.hideCompatibility') : t('harvester.pci.showCompatibility') }}
</button>
<div v-if="showMatrix" class="row mt-20">
<div
v-if="showMatrix"
class="row mt-20"
>
<div class="col span-12">
<CompatibilityMatrix :enabled-devices="enabledDevices" :devices-by-node="devicesByNode" :devices-in-use="devicesInUse" />
<CompatibilityMatrix
:enabled-devices="enabledDevices"
:devices-by-node="devicesByNode"
:devices-in-use="devicesInUse"
/>
</div>
</div>
</template>
<div class="row mt-20">
<div class="col span-12">
<DeviceList :schema="pciDeviceSchema" :devices="pciDevices" @submit.prevent />
<DeviceList
:schema="pciDeviceSchema"
:devices="pciDevices"
@submit.prevent
/>
</div>
</div>
</div>
@@ -2,10 +2,10 @@
import UnitInput from '@shell/components/form/UnitInput';
export default {
name: 'HarvesterReserved',
name: 'HarvesterReserved',
emits: ['updateReserved'],
components: { UnitInput },
props: {
@@ -16,7 +16,7 @@ const _NEW = '_NEW';
export default {
emits: ['update:sshKey'],
components: {
LabeledInput,
ModalWithCard,
@@ -83,7 +83,7 @@ export default {
},
isCreatable() {
if ( this.schema && !this.schema?.collectionMethods.find(x => ['blocked-post', 'post'].includes(x.toLowerCase())) ) {
if ( this.schema && !this.schema?.collectionMethods.find((x) => ['blocked-post', 'post'].includes(x.toLowerCase())) ) {
return false;
}
@@ -151,7 +151,7 @@ export default {
const namespaces = await this.$store.dispatch('harvester/findAll', { type: NAMESPACE });
const exists = namespaces?.find(n => n.name === this.namespace);
const exists = namespaces?.find((n) => n.name === this.namespace);
if (!exists) {
const ns = await this.$store.dispatch('harvester/createNamespace', { name: this.namespace }, { root: true });
@@ -108,7 +108,7 @@ export default {
});
},
groupIsAllEnabled(rows = []) {
return !rows.find(device => !device.passthroughClaim);
return !rows.find((device) => !device.passthroughClaim);
},
changeRows(filterRows) {
@@ -142,11 +142,25 @@ export default {
:rows-per-page="10"
>
<template #group-by="{group}">
<div :ref="group.key" v-trim-whitespace class="group-tab">
<button v-if="groupIsAllEnabled(group.rows)" type="button" class="btn btn-sm role-secondary mr-5" @click="e=>{disableGroup(group.rows); e.target.blur()}">
<div
:ref="group.key"
v-trim-whitespace
class="group-tab"
>
<button
v-if="groupIsAllEnabled(group.rows)"
type="button"
class="btn btn-sm role-secondary mr-5"
@click="e=>{disableGroup(group.rows); e.target.blur()}"
>
{{ t('harvester.usb.disableGroup') }}
</button>
<button v-else type="button" class="btn btn-sm role-secondary mr-5" @click="e=>{enableGroup(group.rows); e.target.blur()}">
<button
v-else
type="button"
class="btn btn-sm role-secondary mr-5"
@click="e=>{enableGroup(group.rows); e.target.blur()}"
>
{{ t('harvester.usb.enableGroup') }}
</button>
<span v-clean-html="group.key" />
@@ -154,7 +168,10 @@ export default {
</template>
<template #cell:claimed="{row}">
<span v-if="row.status.enabled">{{ row.claimedBy }}</span>
<span v-else class="text-muted">&mdash;</span>
<span
v-else
class="text-muted"
>&mdash;</span>
</template>
</ResourceTable>
</template>
@@ -50,7 +50,7 @@ export default {
this.selectedDevices = (this.value?.domain?.devices?.hostDevices || [])
.map(({ name }) => name)
.filter(name => this.enabledDevices.find(device => device?.metadata?.name === name));
.filter((name) => this.enabledDevices.find((device) => device?.metadata?.name === name));
},
data() {
@@ -70,7 +70,7 @@ export default {
watch: {
selectedDevices(neu) {
const formatted = neu.map((selectedDevice) => {
const deviceCRD = this.enabledDevices.find(device => device.metadata.name === selectedDevice);
const deviceCRD = this.enabledDevices.find((device) => device.metadata.name === selectedDevice);
const deviceName = deviceCRD?.status?.resourceName;
return {
@@ -92,7 +92,7 @@ export default {
deviceOpts() {
const filteredOptions = this.enabledDevices.filter((deviceCRD) => {
if (this.selectedDevices.length > 0) {
const selectedDevice = this.enabledDevices.find(device => device.metadata.name === this.selectedDevices[0]);
const selectedDevice = this.enabledDevices.find((device) => device.metadata.name === this.selectedDevices[0]);
return !this.devicesInUse[deviceCRD?.metadata.name] && deviceCRD.status.nodeName === selectedDevice?.status.nodeName;
}
@@ -152,7 +152,7 @@ export default {
this.selectedDevices.forEach((deviceUid) => {
remove(out, (nodeName) => {
const device = this.enabledDevices.find(deviceCRD => deviceCRD.metadata.name === deviceUid);
const device = this.enabledDevices.find((deviceCRD) => deviceCRD.metadata.name === deviceUid);
return device?.status.nodeName !== nodeName;
});
@@ -164,7 +164,7 @@ export default {
methods: {
otherDevices(vmDevices) {
return vmDevices.filter(device => !this.devices.find(usb => device.name === usb.name));
return vmDevices.filter((device) => !this.devices.find((usb) => device.name === usb.name));
}
}
};
@@ -177,7 +177,10 @@ export default {
<Banner color="info">
<t k="harvester.usb.howToUseDevice" />
</Banner>
<Banner v-if="selectedDevices.length > 0" color="info">
<Banner
v-if="selectedDevices.length > 0"
color="info"
>
<t k="harvester.usb.deviceInTheSameHost" />
</Banner>
</div>
@@ -200,28 +203,52 @@ export default {
</LabeledSelect>
</div>
</div>
<div v-if="compatibleNodes.length && selectedDevices.length" class="row">
<div
v-if="compatibleNodes.length && selectedDevices.length"
class="row"
>
<div class="col span-12 text-muted">
Compatible hosts:
<!-- eslint-disable-next-line vue/no-parsing-error -->
<span v-for="(node, idx) in compatibleNodes" :key="node">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
<span
v-for="(node, idx) in compatibleNodes"
:key="node"
>{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
</div>
</div>
<div v-else-if="selectedDevices.length" class="text-error">
<div
v-else-if="selectedDevices.length"
class="text-error"
>
{{ t('harvester.usb.impossibleSelection') }}
</div>
<button type="button" class="btn btn-sm role-link pl-0" @click="e=>{showMatrix = !showMatrix; e.target.blur()}">
<button
type="button"
class="btn btn-sm role-link pl-0"
@click="e=>{showMatrix = !showMatrix; e.target.blur()}"
>
{{ showMatrix ? t('harvester.usb.hideCompatibility') : t('harvester.usb.showCompatibility') }}
</button>
<div v-if="showMatrix" class="row mt-20">
<div
v-if="showMatrix"
class="row mt-20"
>
<div class="col span-12">
<CompatibilityMatrix :enabled-devices="enabledDevices" :devices-by-node="devicesByNode" :devices-in-use="devicesInUse" />
<CompatibilityMatrix
:enabled-devices="enabledDevices"
:devices-by-node="devicesByNode"
:devices-in-use="devicesInUse"
/>
</div>
</div>
</template>
<div class="row mt-20">
<div class="col span-12">
<DeviceList :schema="deviceSchema" :devices="devices" @submit.prevent />
<DeviceList
:schema="deviceSchema"
:devices="devices"
@submit.prevent
/>
</div>
</div>
</div>
@@ -50,7 +50,7 @@ export default {
...(this.value?.domain?.devices?.gpus || []).map(({ name }) => name),
...Object.values(this.vm?.provisionedVGpus).reduce((acc, gpus) => [...acc, ...gpus], [])
]).forEach((name) => {
if (this.enabledDevices.find(device => device?.metadata?.name === name)) {
if (this.enabledDevices.find((device) => device?.metadata?.name === name)) {
this.selectedDevices.push(name);
}
});
@@ -68,7 +68,7 @@ export default {
watch: {
selectedDevices(neu) {
const formatted = neu.map((selectedDevice) => {
const deviceCRD = this.enabledDevices.find(device => device.metadata.name === selectedDevice);
const deviceCRD = this.enabledDevices.find((device) => device.metadata.name === selectedDevice);
const deviceName = `nvidia.com/${ deviceCRD?.status?.configureVGPUTypeName?.replace(/\s+/g, '_') }`;
return {
@@ -125,7 +125,7 @@ export default {
this.selectedDevices.forEach((deviceUid) => {
remove(out, (nodeName) => {
const device = this.enabledDevices.find(deviceCRD => deviceCRD.metadata.name === deviceUid);
const device = this.enabledDevices.find((deviceCRD) => deviceCRD.metadata.name === deviceUid);
return device.spec.nodeName !== nodeName;
});
@@ -137,7 +137,7 @@ export default {
deviceOpts() {
const filteredOptions = this.enabledDevices.filter((deviceCRD) => {
if (this.selectedDevices.length > 0) {
const selectedDevice = this.enabledDevices.find(device => device.metadata.name === this.selectedDevices[0]);
const selectedDevice = this.enabledDevices.find((device) => device.metadata.name === this.selectedDevices[0]);
return !this.devicesInUse[deviceCRD?.metadata.name] && deviceCRD.spec.nodeName === selectedDevice.spec.nodeName;
}
@@ -163,7 +163,10 @@ export default {
<Banner color="info">
<t k="harvester.vgpu.howToUseDevice" />
</Banner>
<Banner v-if="selectedDevices.length > 0" color="info">
<Banner
v-if="selectedDevices.length > 0"
color="info"
>
<t k="harvester.vgpu.deviceInTheSameHost" />
</Banner>
</div>
@@ -186,20 +189,33 @@ export default {
</LabeledSelect>
</div>
</div>
<div v-if="compatibleNodes.length && selectedDevices.length" class="row">
<div
v-if="compatibleNodes.length && selectedDevices.length"
class="row"
>
<div class="col span-12 text-muted">
Compatible hosts:
<!-- eslint-disable-next-line vue/no-parsing-error -->
<span v-for="(node, idx) in compatibleNodes" :key="idx">{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
<span
v-for="(node, idx) in compatibleNodes"
:key="idx"
>{{ node }}{{ idx < compatibleNodes.length-1 ? ', ' : '' }}</span>
</div>
</div>
<div v-else-if="selectedDevices.length" class="text-error">
<div
v-else-if="selectedDevices.length"
class="text-error"
>
{{ t('harvester.vgpu.impossibleSelection') }}
</div>
</template>
<div class="row mt-20">
<div class="col span-12">
<VGpuDeviceList :schema="deviceSchema" :devices="devices" @submit.prevent />
<VGpuDeviceList
:schema="deviceSchema"
:devices="devices"
@submit.prevent
/>
</div>
</div>
</div>
@@ -1,5 +1,5 @@
<script>
import { Sortable } from "sortablejs-vue3";
import { Sortable } from 'sortablejs-vue3';
import InfoBox from '@shell/components/InfoBox';
import { Banner } from '@components/Banner';
import BadgeStateFormatter from '@shell/components/formatter/BadgeStateFormatter';
@@ -20,7 +20,7 @@ import { HCI } from '../../../types';
export default {
emits: ['update:value'],
components: {
Banner, BadgeStateFormatter, Sortable, InfoBox, LabeledInput, UnitInput, LabeledSelect, ModalWithCard
},
@@ -146,7 +146,7 @@ export default {
query: { mode: _EDIT }
};
V.pvc = this.pvcs.find(pvc => pvc.metadata.name === V.realName);
V.pvc = this.pvcs.find((pvc) => pvc.metadata.name === V.realName);
}
return V;
@@ -189,7 +189,7 @@ export default {
while (hasName) {
name = `disk-${ this.nameIdx }`;
hasName = this.rows.find(O => O.name === name);
hasName = this.rows.find((O) => O.name === name);
this.nameIdx++;
}
@@ -255,7 +255,7 @@ export default {
},
getImageDisplayName(id) {
return this.$store.getters['harvester/all'](HCI.IMAGE).find(image => image.id === id)?.spec?.displayName;
return this.$store.getters['harvester/all'](HCI.IMAGE).find((image) => image.id === id)?.spec?.displayName;
},
isLonghornV2(volume) {
@@ -275,8 +275,8 @@ export default {
<Sortable
:list="rows"
:options="{disabled: isView}"
@end="update"
item-key="id"
@end="update"
>
<template #item="{element: volume, index: i}">
<div :key="volume.name">
@@ -6,7 +6,7 @@ import { VOLUME_TYPE, InterfaceOption } from '../../../../config/harvester-map';
import { Banner } from '@components/Banner';
export default {
name: 'HarvesterEditContainer',
name: 'HarvesterEditContainer',
emits: ['update'],
@@ -13,7 +13,7 @@ import { HCI } from '../../../../types';
import { VOLUME_TYPE, InterfaceOption } from '../../../../config/harvester-map';
export default {
name: 'HarvesterEditExisting',
name: 'HarvesterEditExisting',
emits: ['update'],
@@ -79,7 +79,7 @@ export default {
},
image() {
const imageResource = this.$store.getters['harvester/all'](HCI.IMAGE).find(I => I.id === this.pvcResource?.metadata?.annotations?.[HCI_ANNOTATIONS.IMAGE_ID]);
const imageResource = this.$store.getters['harvester/all'](HCI.IMAGE).find((I) => I.id === this.pvcResource?.metadata?.annotations?.[HCI_ANNOTATIONS.IMAGE_ID]);
if (!imageResource) {
return;
@@ -89,7 +89,7 @@ export default {
},
pvcResource() {
return this.allPVCs.find( P => P.metadata.name === this.value.volumeName );
return this.allPVCs.find( (P) => P.metadata.name === this.value.volumeName );
},
volumeOption() {
@@ -130,7 +130,7 @@ export default {
watch: {
'value.volumeName'(neu) {
const pvcResource = this.allPVCs.find( P => P.metadata.name === neu);
const pvcResource = this.allPVCs.find( (P) => P.metadata.name === neu);
if (!pvcResource) {
return;
@@ -88,7 +88,7 @@ export default {
},
imagesOption() {
return this.images.filter(c => c.isReady).sort((a, b) => a.creationTimestamp > b.creationTimestamp ? -1 : 1).map( (I) => {
return this.images.filter((c) => c.isReady).sort((a, b) => a.creationTimestamp > b.creationTimestamp ? -1 : 1).map( (I) => {
return {
label: `${ I.metadata.namespace }/${ I.spec.displayName }`,
value: I.id
@@ -97,7 +97,7 @@ export default {
},
imageName() {
const image = this.imagesOption.find(I => I.value === this.value.image);
const image = this.imagesOption.find((I) => I.value === this.value.image);
return image ? image.label : '-';
},
@@ -163,7 +163,7 @@ export default {
},
onImageChange() {
const imageResource = this.$store.getters['harvester/all'](HCI.IMAGE)?.find( I => this.value.image === I.id);
const imageResource = this.$store.getters['harvester/all'](HCI.IMAGE)?.find( (I) => this.value.image === I.id);
const isIsoImage = /iso$/i.test(imageResource?.imageSuffix);
const imageSize = Math.max(imageResource?.status?.size, imageResource?.status?.virtualSize);
@@ -212,7 +212,11 @@ export default {
data-testid="input-hevi-name"
class="col span-6"
>
<InputOrDisplay :name="t('harvester.fields.name')" :value="value.name" :mode="mode">
<InputOrDisplay
:name="t('harvester.fields.name')"
:value="value.name"
:mode="mode"
>
<LabeledInput
v-model:value="value.name"
:label="t('harvester.fields.name')"
@@ -321,7 +325,10 @@ export default {
</div>
</div>
<div class="row mb-20">
<div v-if="value.volumeBackups && isView" class="col span-3">
<div
v-if="value.volumeBackups && isView"
class="col span-3"
>
<LabelValue
:name="t('harvester.virtualMachine.volume.readyToUse')"
:value="readyToUse"
@@ -14,7 +14,7 @@ import { LVM_DRIVER } from '../../../../models/harvester/storage.k8s.io.storagec
import { DATA_ENGINE_V2 } from '../../../../edit/harvesterhci.io.storage/index.vue';
export default {
name: 'HarvesterEditVolume',
name: 'HarvesterEditVolume',
emits: ['update'],
@@ -82,7 +82,7 @@ export default {
pvcsResource() {
const allPVCs = this.$store.getters['harvester/all'](PVC) || [];
return allPVCs.find(P => P.id === `${ this.namespace }/${ this.value.volumeName }`);
return allPVCs.find((P) => P.id === `${ this.namespace }/${ this.value.volumeName }`);
},
isDisabled() {
@@ -94,7 +94,7 @@ export default {
},
storageClassOptions() {
return this.storageClasses.filter(s => !s.parameters?.backingImage).map((s) => {
return this.storageClasses.filter((s) => !s.parameters?.backingImage).map((s) => {
const label = s.isDefault ? `${ s.name } (${ this.t('generic.default') })` : s.name;
return {
@@ -113,7 +113,7 @@ export default {
'value.storageClassName': {
immediate: true,
handler(neu) {
const storageClass = this.storageClasses.find(sc => sc.name === neu);
const storageClass = this.storageClasses.find((sc) => sc.name === neu);
const provisioner = storageClass?.provisioner;
const engine = storageClass?.parameters?.dataEngine;
@@ -158,7 +158,10 @@ export default {
<template>
<div>
<Loading mode="relative" :loading="loading" />
<Loading
mode="relative"
:loading="loading"
/>
<div class="row mb-20">
<div
class="col span-6"
@@ -249,7 +252,11 @@ export default {
data-testid="input-hev-bus"
class="col span-6"
>
<InputOrDisplay :name="t('harvester.virtualMachine.volume.bus')" :value="value.bus" :mode="mode">
<InputOrDisplay
:name="t('harvester.virtualMachine.volume.bus')"
:value="value.bus"
:mode="mode"
>
<LabeledSelect
v-model:value="value.bus"
:label="t('harvester.virtualMachine.volume.bus')"
@@ -271,7 +278,10 @@ export default {
</div>
</div>
<div class="row mb-20">
<div v-if="value.volumeBackups && isView" class="col span-3">
<div
v-if="value.volumeBackups && isView"
class="col span-3"
>
<LabelValue
:name="t('harvester.virtualMachine.volume.readyToUse')"
:value="readyToUse"
@@ -142,7 +142,7 @@ export default {
versionOptions() {
const defaultVersion = this.curTemplateResource?.defaultVersion;
return this.versions.filter( O => O.templateId === this.templateId).map( (T) => {
return this.versions.filter( (O) => O.templateId === this.templateId).map( (T) => {
const version = T.version;
const label = defaultVersion === version ? `${ version } (${ this.t('generic.default') })` : version;
@@ -157,7 +157,7 @@ export default {
},
curTemplateResource() {
return this.templates.find( O => O.id === this.templateId);
return this.templates.find( (O) => O.id === this.templateId);
},
nameLabel() {
@@ -190,7 +190,7 @@ export default {
enableCpuPinningCheckbox() {
if (this.mode === 'create') {
return this.nodes.some(node => node.isCPUManagerEnabled); // any one of nodes has label cpuManager=true
return this.nodes.some((node) => node.isCPUManagerEnabled); // any one of nodes has label cpuManager=true
}
return true;
@@ -202,7 +202,7 @@ export default {
}
if (this.mode === 'create') {
return this.nodes.every(node => !node.isCPUManagerEnabled); // no node enabled CPU manager
return this.nodes.every((node) => !node.isCPUManagerEnabled); // no node enabled CPU manager
}
return false;
@@ -218,7 +218,7 @@ export default {
if (id !== old && !this.templateVersionId) {
const templates = await this.$store.dispatch('harvester/findAll', { type: HCI.VM_TEMPLATE });
this.templateVersionId = templates.find( O => O.id === id)?.spec?.defaultVersionId;
this.templateVersionId = templates.find( (O) => O.id === id)?.spec?.defaultVersionId;
}
},
immediate: false
@@ -230,7 +230,7 @@ export default {
return;
}
const versions = await this.$store.dispatch('harvester/findAll', { type: HCI.VM_VERSION });
const curVersion = versions.find( V => V.id === id);
const curVersion = versions.find( (V) => V.id === id);
const cloneVersionVM = clone(curVersion.spec.vm);
delete cloneVersionVM.spec?.template?.spec?.accessCredentials;
@@ -458,7 +458,7 @@ export default {
hasAvailableVersion(templateId) {
let hasAvailableVersion = false;
this.versions.filter( O => O.templateId === templateId).find( (T) => {
this.versions.filter( (O) => O.templateId === templateId).find( (T) => {
if (T.isReady) {
hasAvailableVersion = true;
}
@@ -483,7 +483,7 @@ export default {
id="vm"
:done-route="doneRoute"
:resource="value"
:cancelEvent="true"
:cancel-event="true"
:mode="mode"
:can-yaml="isSingle ? true : false"
:errors="errors"
@@ -503,13 +503,13 @@ export default {
<NameNsDescription
:value="value"
@update:value="$emit('update:value', $event)"
:mode="mode"
:has-extra="!isSingle"
:name-label="nameLabel"
:namespaced="true"
:name-placeholder="isSingle ? 'nameNsDescription.name.placeholder' : 'harvester.virtualMachine.instance.multiple.nameNsDescription'"
:extra-columns="isSingle ? [] :['type']"
@update:value="$emit('update:value', $event)"
>
<template #type>
<LabeledInput
@@ -653,16 +653,44 @@ export default {
/>
</Tab>
<Tab v-if="enabledSriovgpu" :label="t('harvester.tab.vGpuDevices')" name="vGpuDevices" :weight="-6">
<VGpuDevices :mode="mode" :value="spec.template.spec" :vm="value" />
<Tab
v-if="enabledSriovgpu"
:label="t('harvester.tab.vGpuDevices')"
name="vGpuDevices"
:weight="-6"
>
<VGpuDevices
:mode="mode"
:value="spec.template.spec"
:vm="value"
/>
</Tab>
<Tab v-if="enabledPCI" :label="t('harvester.tab.usbDevices')" name="usbDevices" :weight="-7">
<UsbDevices :mode="mode" :value="spec.template.spec" :vm="value" />
<Tab
v-if="enabledPCI"
:label="t('harvester.tab.usbDevices')"
name="usbDevices"
:weight="-7"
>
<UsbDevices
:mode="mode"
:value="spec.template.spec"
:vm="value"
/>
</Tab>
<Tab v-if="isEdit" :label="t('harvester.tab.accessCredentials')" name="accessCredentials" :weight="-8">
<AccessCredentials v-model:value="accessCredentials" :mode="mode" :resourceType="value" :is-qemu-installed="isQemuInstalled" />
<Tab
v-if="isEdit"
:label="t('harvester.tab.accessCredentials')"
name="accessCredentials"
:weight="-8"
>
<AccessCredentials
v-model:value="accessCredentials"
:mode="mode"
:resource-type="value"
:is-qemu-installed="isQemuInstalled"
/>
</Tab>
<Tab
@@ -739,11 +767,24 @@ export default {
</div>
<div class="row mb-20">
<a v-if="showAdvanced" v-t="'harvester.generic.showMore'" role="button" @click="toggleAdvanced" />
<a v-else v-t="'harvester.generic.showMore'" role="button" @click="toggleAdvanced" />
<a
v-if="showAdvanced"
v-t="'harvester.generic.showMore'"
role="button"
@click="toggleAdvanced"
/>
<a
v-else
v-t="'harvester.generic.showMore'"
role="button"
@click="toggleAdvanced"
/>
</div>
<div v-if="showAdvanced" class="mb-20">
<div
v-if="showAdvanced"
class="mb-20"
>
<div class="row mb-20">
<div class="col span-6">
<LabeledInput