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();