restruct feature config and add harvester version fallback logic

This commit is contained in:
andy.lee 2024-11-07 23:37:59 +08:00 committed by Francesco Torchia
parent 4c981f6380
commit 78ca1e2f49
No known key found for this signature in database
GPG Key ID: E6D011B7415D4393
2 changed files with 32 additions and 43 deletions

View File

@ -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 // 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 // https://github.com/harvester/dashboard/releases/tag/v1.3.1
const releaseV131 = { const featuresV131 = [
...releaseV130, 'autoRotateRke2CertsSetting',
autoRotateRke2CertsSetting: true, 'supportBundleNodeCollectionTimeoutSetting'
supportBundleNodeCollectionTimeoutSetting: true ];
};
// https://github.com/harvester/dashboard/releases/tag/v1.3.2 // https://github.com/harvester/dashboard/releases/tag/v1.3.2
const releaseV132 = { const featuresV132 = [
...releaseV131, 'autoRotateRke2CertsSetting',
kubeconfigDefaultTokenTTLMinutesSetting: true, 'supportBundleNodeCollectionTimeoutSetting',
}; 'kubeconfigDefaultTokenTTLMinutesSetting',
];
// TODO: change to https://github.com/harvester/dashboard/releases/tag/v1.4.0 after v1.4.0 release // 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 // 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-rc3
// https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc2 // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc2
// https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc1 // https://github.com/harvester/dashboard/releases/tag/v1.4.0-rc1
const releaseV140 = { const featuresV140 = [
...releaseV132, 'autoRotateRke2CertsSetting',
cpuPinning: true, 'supportBundleNodeCollectionTimeoutSetting',
usbPassthrough: true, 'kubeconfigDefaultTokenTTLMinutesSetting',
volumeEncryption: true, 'cpuPinning',
schedulingVMBackup: true, 'usbPassthrough',
vmSnapshotQuota: true, 'volumeEncryption',
longhornV2LVMSupport: true, 'schedulingVMBackup',
improveMaintainMode: true, 'vmSnapshotQuota',
}; 'longhornV2LVMSupport',
'improveMaintainMode',
];
export const RELEASE_FEATURES = { export const RELEASE_FEATURES = {
'v1.4.0': releaseV140, 'v1.3.0': featuresV130,
'v1.3.2': releaseV132, 'v1.3.1': featuresV131,
'v1.3.1': releaseV132, 'v1.3.2': featuresV132,
'v1.3.0': releaseV130, 'v1.4.0': featuresV140,
}; };

View File

@ -12,13 +12,15 @@ export function serverVersion(getters) {
const v = getters['harvester/byId'](HCI.SETTING, 'server-version')?.value; const v = getters['harvester/byId'](HCI.SETTING, 'server-version')?.value;
return `v${ semver.major(v) }.${ semver.minor(v) }.${ semver.patch(v) }`; return `v${ semver.major(v) }.${ semver.minor(v) }.${ semver.patch(v) }`;
} catch (error) {} } catch (error) {
// fallback to the latest version
return ''; return Object.keys(RELEASE_FEATURES).sort((a, b) => semver.compare(a, b)).pop();
}
} }
export const featureEnabled = (getters, featureKey) => { export const featureEnabled = (getters, featureKey) => {
const version = serverVersion(getters); const version = serverVersion(getters);
const releasedFeatures = RELEASE_FEATURES[version] || [];
return !!RELEASE_FEATURES[version]?.[featureKey] || false; return releasedFeatures.includes(featureKey);
}; };