From 78ca1e2f492e25f232456d1bab2bce52039a816d Mon Sep 17 00:00:00 2001 From: "andy.lee" Date: Thu, 7 Nov 2024 23:37:59 +0800 Subject: [PATCH] restruct feature config and add harvester version fallback logic --- pkg/harvester/config/feature-flags.js | 65 +++++++++++---------------- pkg/harvester/utils/feature-flags.js | 10 +++-- 2 files changed, 32 insertions(+), 43 deletions(-) diff --git a/pkg/harvester/config/feature-flags.js b/pkg/harvester/config/feature-flags.js index 09e86310..6421761b 100644 --- a/pkg/harvester/config/feature-flags.js +++ b/pkg/harvester/config/feature-flags.js @@ -1,33 +1,18 @@ - -// https://github.com/harvester/harvester/wiki/Roadmap -const FEATURES = { - cpuPinning: false, - usbPassthrough: false, - volumeEncryption: false, - schedulingVMBackup: false, - vmSnapshotQuota: false, - longhornV2LVMSupport: false, - improveMaintainMode: false, - autoRotateRke2CertsSetting: false, - kubeconfigDefaultTokenTTLMinutesSetting: false, - supportBundleNodeCollectionTimeoutSetting: false -}; - // https://github.com/harvester/dashboard/releases/tag/v1.3.0 -const releaseV130 = { ...FEATURES }; +const featuresV130 = []; // https://github.com/harvester/dashboard/releases/tag/v1.3.1 -const releaseV131 = { - ...releaseV130, - autoRotateRke2CertsSetting: true, - supportBundleNodeCollectionTimeoutSetting: true -}; +const featuresV131 = [ + 'autoRotateRke2CertsSetting', + 'supportBundleNodeCollectionTimeoutSetting' +]; // https://github.com/harvester/dashboard/releases/tag/v1.3.2 -const releaseV132 = { - ...releaseV131, - kubeconfigDefaultTokenTTLMinutesSetting: true, -}; +const featuresV132 = [ + 'autoRotateRke2CertsSetting', + 'supportBundleNodeCollectionTimeoutSetting', + 'kubeconfigDefaultTokenTTLMinutesSetting', +]; // TODO: change to https://github.com/harvester/dashboard/releases/tag/v1.4.0 after v1.4.0 release // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc5 @@ -35,20 +20,22 @@ const releaseV132 = { // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc3 // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc2 // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc1 -const releaseV140 = { - ...releaseV132, - cpuPinning: true, - usbPassthrough: true, - volumeEncryption: true, - schedulingVMBackup: true, - vmSnapshotQuota: true, - longhornV2LVMSupport: true, - improveMaintainMode: true, -}; +const featuresV140 = [ + 'autoRotateRke2CertsSetting', + 'supportBundleNodeCollectionTimeoutSetting', + 'kubeconfigDefaultTokenTTLMinutesSetting', + 'cpuPinning', + 'usbPassthrough', + 'volumeEncryption', + 'schedulingVMBackup', + 'vmSnapshotQuota', + 'longhornV2LVMSupport', + 'improveMaintainMode', +]; export const RELEASE_FEATURES = { - 'v1.4.0': releaseV140, - 'v1.3.2': releaseV132, - 'v1.3.1': releaseV132, - 'v1.3.0': releaseV130, + 'v1.3.0': featuresV130, + 'v1.3.1': featuresV131, + 'v1.3.2': featuresV132, + 'v1.4.0': featuresV140, }; diff --git a/pkg/harvester/utils/feature-flags.js b/pkg/harvester/utils/feature-flags.js index 3284cf36..803ec3ad 100644 --- a/pkg/harvester/utils/feature-flags.js +++ b/pkg/harvester/utils/feature-flags.js @@ -12,13 +12,15 @@ export function serverVersion(getters) { const v = getters['harvester/byId'](HCI.SETTING, 'server-version')?.value; return `v${ semver.major(v) }.${ semver.minor(v) }.${ semver.patch(v) }`; - } catch (error) {} - - return ''; + } catch (error) { + // fallback to the latest version + return Object.keys(RELEASE_FEATURES).sort((a, b) => semver.compare(a, b)).pop(); + } } export const featureEnabled = (getters, featureKey) => { const version = serverVersion(getters); + const releasedFeatures = RELEASE_FEATURES[version] || []; - return !!RELEASE_FEATURES[version]?.[featureKey] || false; + return releasedFeatures.includes(featureKey); };