From 66f53c8a000ee8413e173f7fe29d5088d4b8b3ff Mon Sep 17 00:00:00 2001 From: "andy.lee" Date: Wed, 19 Feb 2025 17:09:12 +0800 Subject: [PATCH] More third party storage UI change Signed-off-by: andy.lee --- .../edit/harvesterhci.io.storage/index.vue | 3 +- .../provisioners/driver.longhorn.io_v2.vue | 4 +- .../models/harvester/persistentvolumeclaim.js | 45 +++++++++++++------ 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/pkg/harvester/edit/harvesterhci.io.storage/index.vue b/pkg/harvester/edit/harvesterhci.io.storage/index.vue index f187a316..b046d18c 100644 --- a/pkg/harvester/edit/harvesterhci.io.storage/index.vue +++ b/pkg/harvester/edit/harvesterhci.io.storage/index.vue @@ -23,10 +23,9 @@ import Tags from '../../components/DiskTags'; import { DATA_ENGINE_V1, DATA_ENGINE_V2 } from '../../models/harvester/persistentvolumeclaim'; import { LVM_DRIVER } from '../../models/harvester/storage.k8s.io.storageclass'; -const LONGHORN_V2_DATA_ENGINE = 'longhorn-system/v2-data-engine'; - export const LVM_TOPOLOGY_LABEL = 'topology.lvm.csi/node'; +const LONGHORN_V2_DATA_ENGINE = 'longhorn-system/v2-data-engine'; const VOLUME_BINDING_MODE_IMMEDIATE = 'Immediate'; const VOLUME_BINDING_MODE_WAIT = 'WaitForFirstConsumer'; diff --git a/pkg/harvester/edit/harvesterhci.io.storage/provisioners/driver.longhorn.io_v2.vue b/pkg/harvester/edit/harvesterhci.io.storage/provisioners/driver.longhorn.io_v2.vue index ffac06a7..44680b7e 100644 --- a/pkg/harvester/edit/harvesterhci.io.storage/provisioners/driver.longhorn.io_v2.vue +++ b/pkg/harvester/edit/harvesterhci.io.storage/provisioners/driver.longhorn.io_v2.vue @@ -63,7 +63,7 @@ export default { diskSelector: null, nodeSelector: null, encrypted: 'false', - migratable: 'false', + migratable: this.value.thirdPartyStorageFeatureEnabled ? 'true' : 'false', dataEngine: DATA_ENGINE_V2 }; } @@ -318,7 +318,7 @@ export default { :label="t('harvester.storage.parameters.migratable.label')" :mode="mode" :options="migratableOptions" - :disabled="true" + :disabled="!value.thirdPartyStorageFeatureEnabled" />
diff --git a/pkg/harvester/models/harvester/persistentvolumeclaim.js b/pkg/harvester/models/harvester/persistentvolumeclaim.js index 16df5bbe..9aba211d 100644 --- a/pkg/harvester/models/harvester/persistentvolumeclaim.js +++ b/pkg/harvester/models/harvester/persistentvolumeclaim.js @@ -46,22 +46,37 @@ export default class HciPv extends HarvesterResource { } } - if (!this.isLonghorn || !this.isLonghornV2) { + const exportImageAction = { + action: 'exportImage', + enabled: this.hasAction('export') && !this.isEncrypted, + icon: 'icon icon-copy', + label: this.t('harvester.action.exportImage') + }; + const takeSnapshotAction = { + action: 'snapshot', + enabled: this.hasAction('snapshot'), + icon: 'icon icon-backup', + label: this.t('harvester.action.snapshot'), + }; + + if (this.thirdPartyStorageFeatureEnabled) { // v1.5.0 out = [ - { - action: 'exportImage', - enabled: this.hasAction('export') && !this.isEncrypted, - icon: 'icon icon-copy', - label: this.t('harvester.action.exportImage') - }, - { - action: 'snapshot', - enabled: this.hasAction('snapshot'), - icon: 'icon icon-backup', - label: this.t('harvester.action.snapshot'), - }, + exportImageAction, + takeSnapshotAction, ...out ]; + // TODO: remove this block if Longhorn V2 engine supports restore volume snapshot + if (this.isLonghornV2) { + out = out.filter((action) => action.action !== takeSnapshotAction.action); + } + } else { // v1.4 / v1.3 + if (!this.isLonghorn || !this.isLonghornV2) { + out = [ + exportImageAction, + takeSnapshotAction, + ...out + ]; + } } return [ @@ -325,6 +340,10 @@ export default class HciPv extends HarvesterResource { return this.dataEngine === DATA_ENGINE_V2; } + get thirdPartyStorageFeatureEnabled() { + return this.$rootGetters['harvester-common/getFeatureEnabled']('thirdPartyStorage'); + } + get resourceExternalLink() { const host = window.location.host; const { params } = this.currentRoute();