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
@@ -193,16 +193,25 @@ export default {
<h3>{{ t('harvester.host.tabs.overview') }}</h3>
<div class="row mb-20">
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.customName')" :value="customName" />
<LabelValue
:name="t('harvester.host.detail.customName')"
:value="customName"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.hostIP')" :value="value.internalIp" />
<LabelValue
:name="t('harvester.host.detail.hostIP')"
:value="value.internalIp"
/>
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.os')" :value="value.status.nodeInfo.osImage" />
<LabelValue
:name="t('harvester.host.detail.os')"
:value="value.status.nodeInfo.osImage"
/>
</div>
<div class="col span-6">
<div class="role">
@@ -223,20 +232,39 @@ export default {
<div class="row mb-20">
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.create')" :value="value.metadata.creationTimestamp" />
<LabelValue
:name="t('harvester.host.detail.create')"
:value="value.metadata.creationTimestamp"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.update')" :value="lastUpdateTime" />
<LabelValue
:name="t('harvester.host.detail.update')"
:value="lastUpdateTime"
/>
</div>
</div>
<div class="row mb-20">
<div v-if="!value.isEtcd" class="col span-6">
<LabelValue :name="t('harvester.host.detail.cpuManager')" :value="cpuManagerStatus" />
<div
v-if="!value.isEtcd"
class="col span-6"
>
<LabelValue
:name="t('harvester.host.detail.cpuManager')"
:value="cpuManagerStatus"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.host.detail.consoleUrl')" :value="consoleUrl.value">
<a slot="value" :href="consoleUrl.value" target="_blank">{{ consoleUrl.display }}</a>
<LabelValue
:name="t('harvester.host.detail.consoleUrl')"
:value="consoleUrl.value"
>
<a
slot="value"
:href="consoleUrl.value"
target="_blank"
>{{ consoleUrl.display }}</a>
</LabelValue>
</div>
</div>
@@ -288,15 +316,24 @@ export default {
<h3>{{ t('harvester.host.detail.more') }}</h3>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.detail.uuid')" :value="value.status.nodeInfo.systemUUID" />
<LabelValue
:name="t('harvester.host.detail.uuid')"
:value="value.status.nodeInfo.systemUUID"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.detail.kernel')" :value="value.status.nodeInfo.kernelVersion" />
<LabelValue
:name="t('harvester.host.detail.kernel')"
:value="value.status.nodeInfo.kernelVersion"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.detail.containerRuntime')" :value="value.status.nodeInfo.containerRuntimeVersion" />
<LabelValue
:name="t('harvester.host.detail.containerRuntime')"
:value="value.status.nodeInfo.containerRuntimeVersion"
/>
</div>
</div>
<div
@@ -10,7 +10,7 @@ import { LONGHORN_VERSION_V1 } from '@shell/config/types';
export default {
emits: ['update:value'],
components: {
LabelValue,
BadgeState,
@@ -44,7 +44,7 @@ export default {
},
computed: {
targetDisk() {
return this.disks.find(disk => disk.name === this.value.name);
return this.disks.find((disk) => disk.name === this.value.name);
},
schedulableTooltipMessage() {
const { name, path } = this.value;
@@ -124,7 +124,10 @@ export default {
</script>
<template>
<div class="disk" @update:value="update">
<div
class="disk"
@update:value="update"
>
<Banner
v-if="mountedMessage"
color="error"
@@ -139,7 +142,10 @@ export default {
>
<template #value>
<div class="mt-5">
<Tag v-for="(prop, key) in value.tags" :key="key">
<Tag
v-for="(prop, key) in value.tags"
:key="key"
>
{{ prop }}
</Tag>
</div>
@@ -185,7 +191,10 @@ export default {
</div>
</div>
</div>
<div v-if="!value.isNew" class="row mt-30">
<div
v-if="!value.isNew"
class="row mt-30"
>
<div class="col span-4">
<LabelValue
:name="t('harvester.host.disk.storageAvailable.label')"
@@ -214,7 +223,10 @@ export default {
:value="value.displayName"
/>
</div>
<div v-if="value.path" class="col span-4">
<div
v-if="value.path"
class="col span-4"
>
<LabelValue
:name="t('harvester.host.disk.path.label')"
:value="value.path"
@@ -37,7 +37,7 @@ export default {
modeText() {
const mode = this.ksmtuned.spec.mode;
return ksmtunedMode.find(M => M.value === mode).label;
return ksmtunedMode.find((M) => M.value === mode).label;
},
thresCoef() {
@@ -47,7 +47,7 @@ export default {
runText() {
const run = this.ksmtuned.spec.run;
return ksmtunedRunOption.find(M => M.value === run).label;
return ksmtunedRunOption.find((M) => M.value === run).label;
},
showRunInformation() {
@@ -77,20 +77,35 @@ export default {
</h2>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.run')" :value="runText" />
<LabelValue
:name="t('harvester.host.ksmtuned.run')"
:value="runText"
/>
</div>
</div>
<div v-if="showRunInformation" class="row mb-20">
<div
v-if="showRunInformation"
class="row mb-20"
>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.thresCoef')" :value="thresCoef" />
<LabelValue
:name="t('harvester.host.ksmtuned.thresCoef')"
:value="thresCoef"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.mode')" :value="modeText" />
<LabelValue
:name="t('harvester.host.ksmtuned.mode')"
:value="modeText"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.enableMergeNodes')" :value="mergeNodesText" />
<LabelValue
:name="t('harvester.host.ksmtuned.enableMergeNodes')"
:value="mergeNodesText"
/>
</div>
</div>
@@ -100,31 +115,51 @@ export default {
<h3>{{ t('harvester.host.ksmtuned.parameters.title') }}</h3>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.parameters.boost')" :value="ksmtuned.spec.ksmtunedParameters.boost" />
<LabelValue
:name="t('harvester.host.ksmtuned.parameters.boost')"
:value="ksmtuned.spec.ksmtunedParameters.boost"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.parameters.decay')" :value="ksmtuned.spec.ksmtunedParameters.decay" />
<LabelValue
:name="t('harvester.host.ksmtuned.parameters.decay')"
:value="ksmtuned.spec.ksmtunedParameters.decay"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.parameters.sleepMsec')" :value="ksmtuned.spec.ksmtunedParameters.sleepMsec" />
<LabelValue
:name="t('harvester.host.ksmtuned.parameters.sleepMsec')"
:value="ksmtuned.spec.ksmtunedParameters.sleepMsec"
/>
</div>
</div>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.parameters.minPages')" :value="ksmtuned.spec.ksmtunedParameters.minPages" />
<LabelValue
:name="t('harvester.host.ksmtuned.parameters.minPages')"
:value="ksmtuned.spec.ksmtunedParameters.minPages"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.parameters.maxPages')" :value="ksmtuned.spec.ksmtunedParameters.maxPages" />
<LabelValue
:name="t('harvester.host.ksmtuned.parameters.maxPages')"
:value="ksmtuned.spec.ksmtunedParameters.maxPages"
/>
</div>
</div>
</div>
<div>
<hr class="divider" />
<h3><t k="harvester.host.ksmtuned.statistics.title" :raw="true" /></h3>
<h3>
<t
k="harvester.host.ksmtuned.statistics.title"
:raw="true"
/>
</h3>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.ksmStatus')">
@@ -135,34 +170,55 @@ export default {
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.sharing')" :value="ksmtuned.status.sharing" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.sharing')"
:value="ksmtuned.status.sharing"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.shared')" :value="ksmtuned.status.shared" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.shared')"
:value="ksmtuned.status.shared"
/>
</div>
</div>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.unshared')" :value="ksmtuned.status.unshared" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.unshared')"
:value="ksmtuned.status.unshared"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.volatile')" :value="ksmtuned.status.volatile" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.volatile')"
:value="ksmtuned.status.volatile"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.fullScans')" :value="ksmtuned.status.fullScans" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.fullScans')"
:value="ksmtuned.status.fullScans"
/>
</div>
</div>
<div class="row mb-20">
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.stableNodeDups')" :value="ksmtuned.status.stableNodeDups" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.stableNodeDups')"
:value="ksmtuned.status.stableNodeDups"
/>
</div>
<div class="col span-4">
<LabelValue :name="t('harvester.host.ksmtuned.statistics.stableNodeChains')" :value="ksmtuned.status.stableNodeChains" />
<LabelValue
:name="t('harvester.host.ksmtuned.statistics.stableNodeChains')"
:value="ksmtuned.status.stableNodeChains"
/>
</div>
</div>
</div>
@@ -57,7 +57,9 @@ export default {
<div>
<div v-if="inventory.warningMessages.length > 0">
<Banner
v-for="(msg, i) in inventory.warningMessages" :key="i" color="error"
v-for="(msg, i) in inventory.warningMessages"
:key="i"
color="error"
:label="msg.text"
/>
</div>
@@ -94,7 +94,11 @@ export default {
<template>
<Loading v-if="$fetchState.pending" />
<div v-else id="host-instances" class="row">
<div
v-else
id="host-instances"
class="row"
>
<div class="col span-12">
<SortableTable
v-bind="$attrs"
@@ -102,11 +106,17 @@ export default {
default-sort-by="age"
:rows="rows"
key-field="_key"
>
<template #cell:state="scope" class="state-col">
<template
#cell:state="scope"
class="state-col"
>
<div class="state">
<HarvesterVmState class="vmstate" :row="scope.row" :all-cluster-network="allClusterNetwork" />
<HarvesterVmState
class="vmstate"
:row="scope.row"
:all-cluster-network="allClusterNetwork"
/>
</div>
</template>
</Sortabletable>
@@ -46,7 +46,7 @@ export default {
const inStore = this.$store.getters['currentProduct'].inStore;
const linkMonitors = this.$store.getters[`${ inStore }/all`](HCI.LINK_MONITOR);
const linkMonitor = (linkMonitors.filter(l => l.id === linkMonitorId) || [])[0] || {};
const linkMonitor = (linkMonitors.filter((l) => l.id === linkMonitorId) || [])[0] || {};
return linkMonitor?.status?.linkStatus?.[nodeName] || [];
},
@@ -93,7 +93,7 @@ export default {
}
const res = await allHash(hash);
const hostNetworkResource = (res.hostNetworks || []).find( O => this.value.id === O.attachNodeName);
const hostNetworkResource = (res.hostNetworks || []).find( (O) => this.value.id === O.attachNodeName);
this.loadMetrics();
@@ -126,7 +126,7 @@ export default {
this.newDisks = clone(disks);
const addons = this.$store.getters[`${ inStore }/all`](HCI.ADD_ONS);
const seeder = addons.find(addon => addon.id === 'harvester-system/harvester-seeder');
const seeder = addons.find((addon) => addon.id === 'harvester-system/harvester-seeder');
const seederEnabled = seeder ? seeder?.spec?.enabled : false;
@@ -134,7 +134,7 @@ export default {
const inStore = this.$store.getters['currentProduct'].inStore;
const inventories = this.$store.getters[`${ inStore }/all`](HCI.INVENTORY) || [];
const inventory = inventories.find(inv => inv.id === `harvester-system/${ this.value.id }`);
const inventory = inventories.find((inv) => inv.id === `harvester-system/${ this.value.id }`);
if (inventory) {
this.inventory = inventory;
@@ -222,14 +222,14 @@ export default {
const nodeId = this.value.id;
const vlanStatuses = this.$store.getters[`${ inStore }/all`](HCI.VLAN_STATUS);
return vlanStatuses.filter(s => s?.status?.node === nodeId) || [];
return vlanStatuses.filter((s) => s?.status?.node === nodeId) || [];
},
longhornNode() {
const inStore = this.$store.getters['currentProduct'].inStore;
const longhornNodes = this.$store.getters[`${ inStore }/all`](LONGHORN.NODES);
return longhornNodes.find(node => node.id === `${ LONGHORN_SYSTEM }/${ this.value.id }`);
return longhornNodes.find((node) => node.id === `${ LONGHORN_SYSTEM }/${ this.value.id }`);
},
events() {
@@ -275,7 +275,7 @@ export default {
seederEnabled() {
const inStore = this.$store.getters['currentProduct'].inStore;
const addons = this.$store.getters[`${ inStore }/all`](HCI.ADD_ONS);
const seeder = addons.find(addon => addon.id === 'harvester-system/harvester-seeder');
const seeder = addons.find((addon) => addon.id === 'harvester-system/harvester-seeder');
return seeder ? seeder?.spec?.enabled : false;
},
@@ -373,14 +373,24 @@ export default {
:side-tabs="true"
@changed="tabChange"
>
<Tab name="basics" :label="t('harvester.host.tabs.basics')" :weight="4" class="bordered-table">
<Tab
name="basics"
:label="t('harvester.host.tabs.basics')"
:weight="4"
class="bordered-table"
>
<Basic
:value="value"
:metrics="metrics"
:mode="mode"
/>
</Tab>
<Tab name="instance" :label="t('harvester.host.tabs.instance')" :weight="3" class="bordered-table">
<Tab
name="instance"
:label="t('harvester.host.tabs.instance')"
:weight="3"
class="bordered-table"
>
<Instance :node="value" />
</Tab>
<Tab
@@ -391,7 +401,9 @@ export default {
class="bordered-table"
>
<InfoBox
v-for="(vlan, i) in vlanStatuses" :key="i" >
v-for="(vlan, i) in vlanStatuses"
:key="i"
>
<VlanStatus
:value="vlan"
:mode="mode"
@@ -415,7 +427,10 @@ export default {
>
<template #value>
<div class="mt-5">
<Tag v-for="(prop, key) in longhornNode.spec.tags" :key="key">
<Tag
v-for="(prop, key) in longhornNode.spec.tags"
:key="key"
>
{{ prop }}
</Tag>
</div>
@@ -447,7 +462,10 @@ export default {
:show-header="false"
:label="t('harvester.host.tabs.ksmtuned')"
>
<HarvesterKsmtuned :mode="mode" :node="value" />
<HarvesterKsmtuned
:mode="mode"
:node="value"
/>
</Tab>
<Tab
@@ -84,14 +84,14 @@ export default {
},
hasBackupProgresses() {
return !!this.rows.find(R => R.status?.progress !== undefined);
return !!this.rows.find((R) => R.status?.progress !== undefined);
},
filteredRows() {
let r = this.rows.filter(row => row.spec?.type === BACKUP_TYPE.BACKUP);
let r = this.rows.filter((row) => row.spec?.type === BACKUP_TYPE.BACKUP);
if (this.id) {
r = r.filter(backup => backup.metadata.annotations?.[HCI_ANNOTATIONS.SVM_BACKUP_ID] === this.id);
r = r.filter((backup) => backup.metadata.annotations?.[HCI_ANNOTATIONS.SVM_BACKUP_ID] === this.id);
}
return r;
@@ -56,10 +56,10 @@ export default {
},
filteredRows() {
let r = this.rows.filter(row => row.spec?.type === BACKUP_TYPE.SNAPSHOT);
let r = this.rows.filter((row) => row.spec?.type === BACKUP_TYPE.SNAPSHOT);
if (this.id) {
r = r.filter(row => row.metadata.annotations?.[HCI_ANNOTATIONS.SVM_BACKUP_ID] === this.id);
r = r.filter((row) => row.metadata.annotations?.[HCI_ANNOTATIONS.SVM_BACKUP_ID] === this.id);
}
return r;
@@ -47,7 +47,11 @@ export default {
</script>
<template>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true">
<Tabbed
v-bind="$attrs"
class="mt-15"
:side-tabs="true"
>
<Tab
name="basic"
:label="t('harvester.virtualMachine.detail.tabs.basics')"
@@ -19,7 +19,7 @@ const registryAddresses = [
export default {
emits: ['input'],
components: {
ResourceTabs,
DetailText,
@@ -161,10 +161,10 @@ export default {
<template>
<ResourceTabs
:value="value"
@update:value="$emit('input', $event)"
:need-events="false"
:need-related="false"
:mode="mode"
@update:value="$emit('input', $event)"
>
<Tab
name="data"
@@ -258,7 +258,9 @@ export default {
<div v-else>
<div
v-for="(row,idx) in parsedRows" :key="idx" class="entry"
v-for="(row,idx) in parsedRows"
:key="idx"
class="entry"
>
<DetailText
:value="row.value"
@@ -69,7 +69,7 @@ export default {
imageName() {
const imageList = this.$store.getters['harvester/all'](HCI.IMAGE) || [];
const image = imageList.find( I => this.imageId === I.id);
const image = imageList.find( (I) => this.imageId === I.id);
return image?.spec?.displayName || '-';
},
@@ -126,29 +126,52 @@ export default {
:mode="mode"
:apply-hooks="applyHooks"
>
<Tabbed v-if="spec" :side-tabs="true" @changed="onTabChanged">
<Tab name="Basics" :label="t('harvester.virtualMachine.detail.tabs.basics')">
<Tabbed
v-if="spec"
:side-tabs="true"
@changed="onTabChanged"
>
<Tab
name="Basics"
:label="t('harvester.virtualMachine.detail.tabs.basics')"
>
<div class="row">
<div class="col span-6 mb-20">
<LabelValue :name="t('harvester.virtualMachine.detail.details.name')" :value="name" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.name')"
:value="name"
/>
</div>
<div class="col span-6 mb-20">
<LabelValue :name="t('harvester.fields.image')" :value="imageName" />
<LabelValue
:name="t('harvester.fields.image')"
:value="imageName"
/>
</div>
</div>
<div class="row">
<div class="col span-6 mb-20">
<LabelValue :name="t('harvester.virtualMachine.detail.details.hostname')" :value="hostname" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.hostname')"
:value="hostname"
/>
</div>
<div class="col span-6 mb-20">
<LabelValue :name="t('harvester.virtualMachine.input.MachineType')" :value="machineType" />
<LabelValue
:name="t('harvester.virtualMachine.input.MachineType')"
:value="machineType"
/>
</div>
</div>
<div class="mb-20">
<CpuMemory :cpu="cpu" :mode="mode" :memory="memory" />
<CpuMemory
:cpu="cpu"
:mode="mode"
:memory="memory"
/>
</div>
<div class="row">
<div class="col span-6 mb-20">
@@ -156,7 +179,10 @@ export default {
<template #value>
<div>
<ul>
<li v-for="(disk, i) in disks" :key="i" >
<li
v-for="(disk, i) in disks"
:key="i"
>
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@@ -169,7 +195,10 @@ export default {
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom, i) in cdroms" :key="i" >
<li
v-for="(rom, i) in cdroms"
:key="i"
>
{{ rom.name }}
</li>
</ul>
@@ -187,7 +216,10 @@ export default {
:label="t('harvester.tab.volume')"
:weight="-1"
>
<Volume v-model:value="diskRows" :mode="mode" />
<Volume
v-model:value="diskRows"
:mode="mode"
/>
</Tab>
<Tab
@@ -195,11 +227,22 @@ export default {
:label="t('harvester.tab.network')"
:weight="-2"
>
<Network v-model:value="networkRows" :mode="mode" />
<Network
v-model:value="networkRows"
:mode="mode"
/>
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="-3">
<OverviewKeypairs v-if="vm" v-model:value="vm" />
<Tab
name="keypairs"
:label="t('harvester.virtualMachine.detail.tabs.keypairs')"
class="bordered-table"
:weight="-3"
>
<OverviewKeypairs
v-if="vm"
v-model:value="vm"
/>
</Tab>
<Tab
@@ -215,7 +258,13 @@ export default {
/>
<div class="spacer"></div>
<Checkbox v-model:value="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
<Checkbox
v-model:value="installUSBTablet"
:mode="mode"
class="check"
type="checkbox"
:label="t('harvester.virtualMachine.enableUsb')"
/>
</Tab>
</Tabbed>
</CruResource>
@@ -75,7 +75,7 @@ export default {
if (sourceImageNamespace && sourceImageName) {
const imageId = `${ sourceImageNamespace }/${ sourceImageName }`;
return this.images.find(image => image.id === imageId);
return this.images.find((image) => image.id === imageId);
}
return null;
@@ -105,7 +105,7 @@ export default {
return this.value.encryptionSecret;
},
secretLink() {
return this.secrets.find(sc => sc.id === this.value.encryptionSecret)?.detailLocation;
return this.secrets.find((sc) => sc.id === this.value.encryptionSecret)?.detailLocation;
},
isEncryptedString() {
@@ -120,7 +120,11 @@ export default {
</script>
<template>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true">
<Tabbed
v-bind="$attrs"
class="mt-15"
:side-tabs="true"
>
<Tab
name="detail"
:label="t('harvester.virtualMachine.detail.tabs.basics')"
@@ -155,63 +159,100 @@ export default {
<div class="row">
<div class="col span-12">
<LabelValue :name="t('harvester.image.size')" :value="formattedValue" class="mb-20" />
<LabelValue
:name="t('harvester.image.size')"
:value="formattedValue"
class="mb-20"
/>
</div>
</div>
<div class="row">
<div class="col span-12">
<LabelValue :name="t('harvester.image.virtualSize')" :value="virtualSize" class="mb-20" />
<LabelValue
:name="t('harvester.image.virtualSize')"
:value="virtualSize"
class="mb-20"
/>
</div>
</div>
<div class="row">
<div class="col span-12">
<LabelValue :name="t('nameNsDescription.description.label')" :value="description" class="mb-20" />
<LabelValue
:name="t('nameNsDescription.description.label')"
:value="description"
class="mb-20"
/>
</div>
</div>
<div class="row">
<div class="col span-12">
<LabelValue :name="t('harvester.image.isEncryption')" :value="isEncryptedString" class="mb-20" />
<LabelValue
:name="t('harvester.image.isEncryption')"
:value="isEncryptedString"
class="mb-20"
/>
</div>
</div>
<div v-if="value.isEncrypted" class="row mb-20">
<div
v-if="value.isEncrypted"
class="row mb-20"
>
<div class="col span-12">
<div class="text-label">
{{ t('harvester.image.encryptionSecret') }}
</div>
<router-link v-if="encryptionSecret && secretLink" :to="secretLink">
<router-link
v-if="encryptionSecret && secretLink"
:to="secretLink"
>
{{ encryptionSecret }}
</router-link>
<span v-else-if="encryptionSecret">
{{ encryptionSecret }}
</span>
<span v-else class="text-muted">
<span
v-else
class="text-muted"
>
&mdash;
</span>
</div>
</div>
<div v-if="isEncryptedOrDecrypted" class="row mb-20">
<div
v-if="isEncryptedOrDecrypted"
class="row mb-20"
>
<div class="col span-12">
<div class="text-label">
{{ t('harvester.image.sourceImage') }}
</div>
<router-link v-if="sourceImageId && sourceImageLink" :to="sourceImageLink">
<router-link
v-if="sourceImageId && sourceImageLink"
:to="sourceImageLink"
>
{{ sourceImageId }}
</router-link>
<span v-else-if="sourceImageId">
{{ sourceImageId }}
</span>
<span v-else class="text-muted">
<span
v-else
class="text-muted"
>
&mdash;
</span>
</div>
</div>
<div v-if="errorMessage !== '-'" class="row">
<div
v-if="errorMessage !== '-'"
class="row"
>
<div class="col span-12">
<div>
{{ t('tableHeaders.message') }}
@@ -69,7 +69,7 @@ export default {
imageName() {
const imageList = this.$store.getters['harvester/all'](HCI.IMAGE) || [];
const image = imageList.find( I => this.imageId === I.id);
const image = imageList.find( (I) => this.imageId === I.id);
return image?.spec?.displayName || '-';
},
@@ -126,29 +126,52 @@ export default {
:mode="mode"
:apply-hooks="applyHooks"
>
<Tabbed v-if="spec" :side-tabs="true" @changed="onTabChanged">
<Tab name="Basics" :label="t('harvester.virtualMachine.detail.tabs.basics')">
<Tabbed
v-if="spec"
:side-tabs="true"
@changed="onTabChanged"
>
<Tab
name="Basics"
:label="t('harvester.virtualMachine.detail.tabs.basics')"
>
<div class="row mb-10">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.name')" :value="name" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.name')"
:value="name"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.fields.image')" :value="imageName" />
<LabelValue
:name="t('harvester.fields.image')"
:value="imageName"
/>
</div>
</div>
<div class="row mb-10">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.hostname')" :value="hostname" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.hostname')"
:value="hostname"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.input.MachineType')" :value="machineType" />
<LabelValue
:name="t('harvester.virtualMachine.input.MachineType')"
:value="machineType"
/>
</div>
</div>
<CpuMemory :cpu="cpu" :mode="mode" :memory="memory" />
<CpuMemory
:cpu="cpu"
:mode="mode"
:memory="memory"
/>
<div class="row mb-10">
<div class="col span-6">
@@ -156,7 +179,10 @@ export default {
<template #value>
<div>
<ul>
<li v-for="(disk, i) in disks" :key="i" >
<li
v-for="(disk, i) in disks"
:key="i"
>
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@@ -169,7 +195,10 @@ export default {
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom, i) in cdroms" :key="i" >
<li
v-for="(rom, i) in cdroms"
:key="i"
>
{{ rom.name }}
</li>
</ul>
@@ -188,7 +217,10 @@ export default {
:label="t('harvester.tab.volume')"
:weight="-1"
>
<Volume v-model:value="diskRows" :mode="mode" />
<Volume
v-model:value="diskRows"
:mode="mode"
/>
</Tab>
<Tab
@@ -196,11 +228,22 @@ export default {
:label="t('harvester.tab.network')"
:weight="-2"
>
<Network v-model:value="networkRows" :mode="mode" />
<Network
v-model:value="networkRows"
:mode="mode"
/>
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="-3">
<OverviewKeypairs v-if="vm" v-model:value="vm" />
<Tab
name="keypairs"
:label="t('harvester.virtualMachine.detail.tabs.keypairs')"
class="bordered-table"
:weight="-3"
>
<OverviewKeypairs
v-if="vm"
v-model:value="vm"
/>
</Tab>
<Tab
@@ -216,7 +259,13 @@ export default {
/>
<div class="spacer"></div>
<Checkbox v-model:value="installUSBTablet" :mode="mode" class="check" type="checkbox" :label="t('harvester.virtualMachine.enableUsb')" />
<Checkbox
v-model:value="installUSBTablet"
:mode="mode"
class="check"
type="checkbox"
:label="t('harvester.virtualMachine.enableUsb')"
/>
</Tab>
</Tabbed>
</CruResource>
@@ -63,7 +63,7 @@ export default {
imageName() {
const imageList = this.$store.getters['harvester/all'](HCI.IMAGE) || [];
const image = imageList.find( I => this.value.rootImageId === I.id);
const image = imageList.find( (I) => this.value.rootImageId === I.id);
return image?.spec?.displayName || 'N/A';
},
@@ -134,11 +134,17 @@ export default {
<template>
<div>
<VMConsoleBar :resourceType="value" class="consoleBut" />
<VMConsoleBar
:resource-type="value"
class="consoleBut"
/>
<div class="overview-basics">
<div class="row">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.name')" :value="value.nameDisplay">
<LabelValue
:name="t('harvester.virtualMachine.detail.details.name')"
:value="value.nameDisplay"
>
<template #value>
<div class="smart-row">
<div class="console">
@@ -149,13 +155,19 @@ export default {
</LabelValue>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.fields.image')" :value="imageName" />
<LabelValue
:name="t('harvester.fields.image')"
:value="imageName"
/>
</div>
</div>
<div class="row">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.hostname')" :value="hostname">
<LabelValue
:name="t('harvester.virtualMachine.detail.details.hostname')"
:value="hostname"
>
<template #value>
<div>
{{ hostname }}
@@ -165,7 +177,10 @@ export default {
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.node')" :value="node">
<LabelValue
:name="t('harvester.virtualMachine.detail.details.node')"
:value="node"
>
<template #value>
<div>
{{ node }}
@@ -179,13 +194,19 @@ export default {
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.ipAddress')">
<template #value>
<HarvesterIpAddress v-model:value="value.id" :row="value" />
<HarvesterIpAddress
v-model:value="value.id"
:row="value"
/>
</template>
</LabelValue>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.created')" :value="creationTimestamp" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.created')"
:value="creationTimestamp"
/>
</div>
</div>
@@ -195,10 +216,17 @@ export default {
<div class="row">
<div class="col span-6">
<InputOrDisplay :name="t('harvester.virtualMachine.detail.details.bootOrder')" :value="disks" :mode="mode">
<InputOrDisplay
:name="t('harvester.virtualMachine.detail.details.bootOrder')"
:value="disks"
:mode="mode"
>
<template #value>
<ul>
<li v-for="(disk, i) in disks" :key="i" >
<li
v-for="(disk, i) in disks"
:key="i"
>
{{ disk.bootOrder }}. {{ disk.name }} ({{ getDeviceType(disk) }})
</li>
</ul>
@@ -206,11 +234,18 @@ export default {
</InputOrDisplay>
</div>
<div class="col span-6">
<InputOrDisplay :name="t('harvester.virtualMachine.detail.details.CDROMs')" :value="cdroms" :mode="mode">
<InputOrDisplay
:name="t('harvester.virtualMachine.detail.details.CDROMs')"
:value="cdroms"
:mode="mode"
>
<template #value>
<div>
<ul v-if="cdroms.length > 0">
<li v-for="(rom, i) in cdroms" :key="i" >
<li
v-for="(rom, i) in cdroms"
:key="i"
>
{{ rom.name }}
</li>
</ul>
@@ -224,17 +259,29 @@ export default {
</div>
<div class="row">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.operatingSystem')" :value="operatingSystem" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.operatingSystem')"
:value="operatingSystem"
/>
</div>
<LabelValue :name="t('harvester.virtualMachine.detail.details.flavor')" :value="flavor" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.flavor')"
:value="flavor"
/>
</div>
<div class="row">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.kernelRelease')" :value="kernelRelease" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.kernelRelease')"
:value="kernelRelease"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.input.MachineType')" :value="machineType" />
<LabelValue
:name="t('harvester.virtualMachine.input.MachineType')"
:value="machineType"
/>
</div>
</div>
</div>
@@ -42,7 +42,7 @@ export default {
},
isShow(id = '') {
const ssh = this.sshKeys.find(O => O?.data?.id === id) || {};
const ssh = this.sshKeys.find((O) => O?.data?.id === id) || {};
return ssh.showKey || false;
}
@@ -66,18 +66,31 @@ export default {
<template>
<div class="overview-sshKeys">
<div v-for="(ssh, index) in sshKeys" :key="index">
<div
v-for="(ssh, index) in sshKeys"
:key="index"
>
<div class="col span-4">
{{ ssh.id }}
</div>
<div class="col span-7 offset-1">
<div v-if="ssh.showKey" class="key-display">
<div
v-if="ssh.showKey"
class="key-display"
>
{{ ssh.publicKey }}
<button class="btn btn-sm role-link hide-bar" @click="toggleShow(index)">
<button
class="btn btn-sm role-link hide-bar"
@click="toggleShow(index)"
>
<i class="icon icon-x"></i>
</button>
</div>
<button v-else class="btn btn-sm role-link" @click="toggleShow(index)">
<button
v-else
class="btn btn-sm role-link"
@click="toggleShow(index)"
>
*******<i class="icons icon-show"></i>
</button>
</div>
@@ -60,19 +60,31 @@ export default {
<div>
<div class="row mb-20">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.sourceNode')" :value="sourceNode" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.sourceNode')"
:value="sourceNode"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.targetNode')" :value="targetNode" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.targetNode')"
:value="targetNode"
/>
</div>
</div>
<div class="row mb-20">
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.started')" :value="started" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.started')"
:value="started"
/>
</div>
<div class="col span-6">
<LabelValue :name="t('harvester.virtualMachine.detail.details.ended')" :value="ended" />
<LabelValue
:name="t('harvester.virtualMachine.detail.details.ended')"
:value="ended"
/>
</div>
</div>
</div>
@@ -139,7 +139,7 @@ export default {
const involvedName = e?.involvedObject?.name;
const matchPVC = pvcName.find(name => name === involvedName);
const matchPVC = pvcName.find((name) => name === involvedName);
return (involvedName === name || involvedName === podName || matchPVC) && e.firstTimestamp >= creationTimestamp;
}).sort((a, b) => {
@@ -182,12 +182,31 @@ export default {
<template>
<div>
<Tabbed v-bind="$attrs" class="mt-15" :side-tabs="true" @changed="onTabChanged">
<Tab name="basics" :label="t('harvester.virtualMachine.detail.tabs.basics')" class="bordered-table" :weight="7">
<OverviewBasics :value="value" :vmi="vmi" mode="view" />
<Tabbed
v-bind="$attrs"
class="mt-15"
:side-tabs="true"
@changed="onTabChanged"
>
<Tab
name="basics"
:label="t('harvester.virtualMachine.detail.tabs.basics')"
class="bordered-table"
:weight="7"
>
<OverviewBasics
:value="value"
:vmi="vmi"
mode="view"
/>
</Tab>
<Tab name="disks" :label="t('harvester.tab.volume')" class="bordered-table" :weight="6">
<Tab
name="disks"
:label="t('harvester.tab.volume')"
class="bordered-table"
:weight="6"
>
<Volume
v-model:value="diskRows"
mode="view"
@@ -197,15 +216,33 @@ export default {
/>
</Tab>
<Tab name="networks" :label="t('harvester.virtualMachine.detail.tabs.networks')" class="bordered-table" :weight="5">
<Network v-model:value="networkRows" mode="view" />
<Tab
name="networks"
:label="t('harvester.virtualMachine.detail.tabs.networks')"
class="bordered-table"
:weight="5"
>
<Network
v-model:value="networkRows"
mode="view"
/>
</Tab>
<Tab name="keypairs" :label="t('harvester.virtualMachine.detail.tabs.keypairs')" class="bordered-table" :weight="4">
<Tab
name="keypairs"
:label="t('harvester.virtualMachine.detail.tabs.keypairs')"
class="bordered-table"
:weight="4"
>
<OverviewKeypairs :value="value" />
</Tab>
<Tab v-if="hasResourceQuotaSchema" name="quotas" :label="t('harvester.tab.quotas')" :weight="3">
<Tab
v-if="hasResourceQuotaSchema"
name="quotas"
:label="t('harvester.tab.quotas')"
:weight="3"
>
<LabelValue
:name="t('harvester.snapshot.totalSnapshotSize')"
:value="totalSnapshotSize"
@@ -229,13 +266,27 @@ export default {
</template>
</Tab>
<Tab name="nodeScheduling" :label="t('workload.container.titles.nodeScheduling')" :weight="2.4">
<Tab
name="nodeScheduling"
:label="t('workload.container.titles.nodeScheduling')"
:weight="2.4"
>
<template #default="{active}">
<NodeScheduling v-if="spec" :key="active" :mode="mode" :value="spec.template.spec" :nodes="nodesIdOptions" />
<NodeScheduling
v-if="spec"
:key="active"
:mode="mode"
:value="spec.template.spec"
:nodes="nodesIdOptions"
/>
</template>
</Tab>
<Tab :label="t('harvester.tab.vmScheduling')" name="vmScheduling" :weight="2.3">
<Tab
:label="t('harvester.tab.vmScheduling')"
name="vmScheduling"
:weight="2.3"
>
<template #default="{active}">
<PodAffinity
v-if="spec"
@@ -250,11 +301,25 @@ export default {
</template>
</Tab>
<Tab :label="t('harvester.tab.accessCredentials')" class="bordered-table" name="accessCredentials" :weight="2.2">
<AccessCredentials mode="view" :value="accessCredentials" :resourceType="value" />
<Tab
:label="t('harvester.tab.accessCredentials')"
class="bordered-table"
name="accessCredentials"
:weight="2.2"
>
<AccessCredentials
mode="view"
:value="accessCredentials"
:resource-type="value"
/>
</Tab>
<Tab name="cloudConfig" :label="t('harvester.virtualMachine.detail.tabs.cloudConfig')" class="bordered-table" :weight="2">
<Tab
name="cloudConfig"
:label="t('harvester.virtualMachine.detail.tabs.cloudConfig')"
class="bordered-table"
:weight="2"
>
<CloudConfig
ref="yamlEditor"
mode="view"
@@ -263,12 +328,25 @@ export default {
/>
</Tab>
<Tab name="event" :label="t('harvester.virtualMachine.detail.tabs.events')" :weight="1">
<Events :resource="vmi" :events="events" />
<Tab
name="event"
:label="t('harvester.virtualMachine.detail.tabs.events')"
:weight="1"
>
<Events
:resource="vmi"
:events="events"
/>
</Tab>
<Tab name="migration" :label="t('harvester.virtualMachine.detail.tabs.migration')">
<Migration :value="value" :vmi-resource="vmi" />
<Tab
name="migration"
:label="t('harvester.virtualMachine.detail.tabs.migration')"
>
<Migration
:value="value"
:vmi-resource="vmi"
/>
</Tab>
<Tab
@@ -8,7 +8,7 @@ import { NETWORK_HEADERS } from '@pkg/harvester/list/harvesterhci.io.networkatta
export default {
emits: ['input'],
components: {
ResourceTabs,
Tab,
@@ -37,7 +37,7 @@ export default {
const inStore = this.$store.getters['currentProduct'].inStore;
const networks = this.$store.getters[`${ inStore }/all`](NETWORK_ATTACHMENT);
return networks.filter(n => n?.id === this.value?.spec?.selector?.network);
return networks.filter((n) => n?.id === this.value?.spec?.selector?.network);
},
networkHeaders() {
@@ -74,8 +74,8 @@ export default {
<template>
<ResourceTabs
:value="value"
@update:value="$emit('input', $event)"
:need-related="false"
@update:value="$emit('input', $event)"
>
<Tab
name="network"
@@ -11,7 +11,7 @@ import { IP_POOL_HEADERS } from '../config/harvester-cluster';
export default {
emits: ['input'],
components: {
ResourceTabs,
Tab,
@@ -43,7 +43,7 @@ export default {
const inStore = this.$store.getters['currentProduct'].inStore;
const ipPools = this.$store.getters[`${ inStore }/all`](HCI.IP_POOL);
return ipPools.filter(i => i.id === this.value.status.allocatedAddress.ipPool);
return ipPools.filter((i) => i.id === this.value.status.allocatedAddress.ipPool);
},
ipPoolHeaders() {
@@ -86,7 +86,7 @@ export default {
},
backendServerSelectors() {
return Object.keys(this.value.spec?.backendServerSelector || {}).map(key => ({
return Object.keys(this.value.spec?.backendServerSelector || {}).map((key) => ({
key,
value: this.value.spec.backendServerSelector[key],
}));
@@ -105,12 +105,12 @@ export default {
vmHeaders() {
const filterNames = ['state', 'ip', 'node'];
return VM_HEADERS.filter(h => !filterNames.includes(h.name));
return VM_HEADERS.filter((h) => !filterNames.includes(h.name));
},
vms() {
const inStore = this.$store.getters['currentProduct'].inStore;
const vms = this.$store.getters[`${ inStore }/all`](HCI.VM).filter(vm => vm.metadata.namespace === this.value.metadata.namespace);
const vms = this.$store.getters[`${ inStore }/all`](HCI.VM).filter((vm) => vm.metadata.namespace === this.value.metadata.namespace);
const match = matching(vms, this.value?.spec?.backendServerSelector, 'spec.template.metadata.labels');
return match;
@@ -122,8 +122,8 @@ export default {
<template>
<ResourceTabs
:value="value"
@update:value="$emit('input', $event)"
:need-related="false"
@update:value="$emit('input', $event)"
>
<Tab
v-if="value.spec.ipam === 'pool'"
@@ -12,7 +12,7 @@ import { HCI } from '@pkg/harvester/config/labels-annotations';
export default {
emits: ['input'],
components: {
ResourceTabs,
Tab,
@@ -64,7 +64,7 @@ export default {
if (!isEmpty(selector)) {
return matching(nodes, selector);
} else if (matchedNodes && matchedNodes.length > 0) {
return nodes.filter(node => matchedNodes.includes(node.id));
return nodes.filter((node) => matchedNodes.includes(node.id));
} else {
return nodes;
}
@@ -76,8 +76,8 @@ export default {
<template>
<ResourceTabs
:value="value"
@update:value="$emit('input', $event)"
:need-related="false"
@update:value="$emit('input', $event)"
>
<Tab
name="node"