mirror of
https://github.com/harvester/harvester-ui-extension.git
synced 2025-12-13 13:11:43 +00:00
add thirdPartyStorage feature flag
Signed-off-by: andy.lee <andy.lee@suse.com>
This commit is contained in:
parent
40794d89a0
commit
b828c2f66d
@ -51,7 +51,8 @@ const featuresV150 = [
|
|||||||
'tpmPersistentState',
|
'tpmPersistentState',
|
||||||
'efiPersistentState',
|
'efiPersistentState',
|
||||||
'untaggedNetworkSetting',
|
'untaggedNetworkSetting',
|
||||||
'skipSingleReplicaDetachedVol'
|
'skipSingleReplicaDetachedVol',
|
||||||
|
'thirdPartyStorage'
|
||||||
];
|
];
|
||||||
|
|
||||||
export const RELEASE_FEATURES = {
|
export const RELEASE_FEATURES = {
|
||||||
|
|||||||
@ -16,6 +16,7 @@ import { STORAGE_CLASS } from '@shell/config/types';
|
|||||||
import { VM_IMAGE_FILE_FORMAT } from '../validators/vm-image';
|
import { VM_IMAGE_FILE_FORMAT } from '../validators/vm-image';
|
||||||
import { OS } from '../mixins/harvester-vm';
|
import { OS } from '../mixins/harvester-vm';
|
||||||
import { HCI } from '../types';
|
import { HCI } from '../types';
|
||||||
|
import { LVM_DRIVER } from '../models/harvester/storage.k8s.io.storageclass';
|
||||||
|
|
||||||
const ENCRYPT = 'encrypt';
|
const ENCRYPT = 'encrypt';
|
||||||
const DECRYPT = 'decrypt';
|
const DECRYPT = 'decrypt';
|
||||||
@ -161,9 +162,10 @@ export default {
|
|||||||
|
|
||||||
storageClassOptions() {
|
storageClassOptions() {
|
||||||
const storages = this.value.spec?.securityParameters?.cryptoOperation === ENCRYPT ? this.encryptedStorageClasses : this.nonEncryptedStorageClasses;
|
const storages = this.value.spec?.securityParameters?.cryptoOperation === ENCRYPT ? this.encryptedStorageClasses : this.nonEncryptedStorageClasses;
|
||||||
|
const filteredStorages = this.value.thirdPartyStorageFeatureEnabled ? storages.filter((s) => !s.parameters?.backingImage) : storages
|
||||||
|
.filter((s) => !s.parameters?.backingImage && s.provisioner !== LVM_DRIVER) ;
|
||||||
|
|
||||||
return storages
|
return filteredStorages
|
||||||
.filter((s) => !s.parameters?.backingImage)
|
|
||||||
.map((s) => {
|
.map((s) => {
|
||||||
const label = s.isDefault ? `${ s.name } (${ this.t('generic.default') })` : s.name;
|
const label = s.isDefault ? `${ s.name } (${ this.t('generic.default') })` : s.name;
|
||||||
|
|
||||||
@ -181,7 +183,9 @@ export default {
|
|||||||
|
|
||||||
set(nue) {
|
set(nue) {
|
||||||
this.value.metadata.annotations[HCI_ANNOTATIONS.STORAGE_CLASS] = nue;
|
this.value.metadata.annotations[HCI_ANNOTATIONS.STORAGE_CLASS] = nue;
|
||||||
this.value.spec.targetStorageClassName = nue;
|
if (this.value.thirdPartyStorageFeatureEnabled) {
|
||||||
|
this.value.spec.targetStorageClassName = nue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sourceImageOptions() {
|
sourceImageOptions() {
|
||||||
@ -264,7 +268,7 @@ export default {
|
|||||||
'storageClassName'(neu) {
|
'storageClassName'(neu) {
|
||||||
const storageClass = this.storages.find((s) => s.id === neu);
|
const storageClass = this.storages.find((s) => s.id === neu);
|
||||||
|
|
||||||
if (storageClass) {
|
if (storageClass && this.value.thirdPartyStorageFeatureEnabled) {
|
||||||
this.value.spec.backend = storageClass.isLonghornV1 ? 'backingimage' : 'cdi';
|
this.value.spec.backend = storageClass.isLonghornV1 ? 'backingimage' : 'cdi';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -90,7 +90,7 @@ export default {
|
|||||||
imagesOption() {
|
imagesOption() {
|
||||||
return this.images.filter((c) => c.isReady).sort((a, b) => a.creationTimestamp > b.creationTimestamp ? -1 : 1).map( (I) => {
|
return this.images.filter((c) => c.isReady).sort((a, b) => a.creationTimestamp > b.creationTimestamp ? -1 : 1).map( (I) => {
|
||||||
return {
|
return {
|
||||||
label: `${ I.metadata.namespace }/${ I.spec.displayName } (${ I.imageStorageClass } / ${ I.virtualSize })`,
|
label: this.imageOptionLabel(I),
|
||||||
value: I.id
|
value: I.id
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
@ -116,6 +116,10 @@ export default {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
thirdPartyStorageEnabled() {
|
||||||
|
return this.$store.getters['harvester-common/getFeatureEnabled']('thirdPartyStorage');
|
||||||
|
},
|
||||||
|
|
||||||
isLonghornV2() {
|
isLonghornV2() {
|
||||||
return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2;
|
return this.value.pvc?.isLonghornV2 || this.value.pvc?.storageClass?.isLonghornV2;
|
||||||
},
|
},
|
||||||
@ -131,7 +135,7 @@ export default {
|
|||||||
diskSize() {
|
diskSize() {
|
||||||
const size = this.value?.size || '0';
|
const size = this.value?.size || '0';
|
||||||
|
|
||||||
return `${ size.replace('Gi', '') } GiB`;
|
return `${ size.replace('Gi', '') } GB`;
|
||||||
},
|
},
|
||||||
|
|
||||||
imageVirtualSizeInByte() {
|
imageVirtualSizeInByte() {
|
||||||
@ -143,6 +147,10 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
showDiskTooSmallError() {
|
showDiskTooSmallError() {
|
||||||
|
if (!this.thirdPartyStorageEnabled ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return this.imageVirtualSizeInByte > this.diskSizeInByte;
|
return this.imageVirtualSizeInByte > this.diskSizeInByte;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -184,6 +192,15 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
imageOptionLabel(image) {
|
||||||
|
let label = `${ image.metadata.namespace }/${ image.spec.displayName }`;
|
||||||
|
|
||||||
|
if (this.thirdPartyStorageEnabled) {
|
||||||
|
label += ` (${ image.imageStorageClass } / ${ image.virtualSize })`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return label;
|
||||||
|
},
|
||||||
update() {
|
update() {
|
||||||
this.value.hasDiskError = this.showDiskTooSmallError;
|
this.value.hasDiskError = this.showDiskTooSmallError;
|
||||||
this.$emit('update');
|
this.$emit('update');
|
||||||
|
|||||||
@ -77,4 +77,8 @@ export default class HciStorageClass extends StorageClass {
|
|||||||
get volumeEncryptionFeatureEnabled() {
|
get volumeEncryptionFeatureEnabled() {
|
||||||
return this.$rootGetters['harvester-common/getFeatureEnabled']('volumeEncryption');
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('volumeEncryption');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get thirdPartyStorageFeatureEnabled() {
|
||||||
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('thirdPartyStorage');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -243,8 +243,8 @@ export default class HciVmImage extends HarvesterResource {
|
|||||||
return formatSi(size, {
|
return formatSi(size, {
|
||||||
increment: 1024,
|
increment: 1024,
|
||||||
maxPrecision: 2,
|
maxPrecision: 2,
|
||||||
suffix: 'iB',
|
suffix: 'B',
|
||||||
firstSuffix: 'iB',
|
firstSuffix: 'B',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -258,8 +258,8 @@ export default class HciVmImage extends HarvesterResource {
|
|||||||
return formatSi(virtualSize, {
|
return formatSi(virtualSize, {
|
||||||
increment: 1024,
|
increment: 1024,
|
||||||
maxPrecision: 2,
|
maxPrecision: 2,
|
||||||
suffix: 'iB',
|
suffix: 'B',
|
||||||
firstSuffix: 'iB',
|
firstSuffix: 'B',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,6 +389,10 @@ export default class HciVmImage extends HarvesterResource {
|
|||||||
return this.$rootGetters['harvester-common/getFeatureEnabled']('volumeEncryption');
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('volumeEncryption');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get thirdPartyStorageFeatureEnabled() {
|
||||||
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('thirdPartyStorage');
|
||||||
|
}
|
||||||
|
|
||||||
download() {
|
download() {
|
||||||
window.location.href = this.links.download;
|
window.location.href = this.links.download;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1183,6 +1183,10 @@ export default class VirtVm extends HarvesterResource {
|
|||||||
return this.$rootGetters['harvester-common/getFeatureEnabled']('efiPersistentState');
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('efiPersistentState');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get thirdPartyStorageFeatureEnabled() {
|
||||||
|
return this.$rootGetters['harvester-common/getFeatureEnabled']('thirdPartyStorage');
|
||||||
|
}
|
||||||
|
|
||||||
setInstanceLabels(val) {
|
setInstanceLabels(val) {
|
||||||
if ( !this.spec?.template?.metadata?.labels ) {
|
if ( !this.spec?.template?.metadata?.labels ) {
|
||||||
set(this, 'spec.template.metadata.labels', {});
|
set(this, 'spec.template.metadata.labels', {});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user