mirror of
https://github.com/harvester/harvester-ui-extension.git
synced 2026-10-04 13:16:05 +08:00
Lint fixes
Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
This commit is contained in:
@@ -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"
|
||||
>
|
||||
—
|
||||
</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"
|
||||
>
|
||||
—
|
||||
</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
-16
@@ -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>
|
||||
|
||||
+18
-5
@@ -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>
|
||||
|
||||
+16
-4
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user