Refactoring feature flags store functions

Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
This commit is contained in:
Francesco Torchia 2024-11-11 19:52:58 +01:00
parent 8ba4dbd9e8
commit 021a64a5ec
No known key found for this signature in database
GPG Key ID: E6D011B7415D4393
10 changed files with 39 additions and 28 deletions

View File

@ -21,7 +21,9 @@ export default {
}, },
upgradeLink() { upgradeLink() {
return docLink(DOC.UPGRADE_URL, this.$store.getters); const version = this.$rootGetters['harvester-common/getServerVersion']();
return docLink(DOC.UPGRADE_URL, version);
} }
}, },
}; };

View File

@ -88,7 +88,9 @@ export default {
computed: { computed: {
storageNetworkExampleLink() { storageNetworkExampleLink() {
return docLink(DOC.STORAGE_NETWORK_EXAMPLE, this.$store.getters); const version = this.$rootGetters['harvester-common/getServerVersion']();
return docLink(DOC.STORAGE_NETWORK_EXAMPLE, version);
}, },
clusterNetworkOptions() { clusterNetworkOptions() {
const inStore = this.$store.getters['currentProduct'].inStore; const inStore = this.$store.getters['currentProduct'].inStore;

View File

@ -1,16 +1,18 @@
// https://github.com/harvester/dashboard/releases/tag/v1.3.0 // https://github.com/harvester/dashboard/releases/tag/v1.3.0
const featuresV130 = []; const featuresV130 = [
'supportHarvesterClusterVersion'
];
// https://github.com/harvester/dashboard/releases/tag/v1.3.1 // https://github.com/harvester/dashboard/releases/tag/v1.3.1
const featuresV131 = [ const featuresV131 = [
...featuresV130,
'autoRotateRke2CertsSetting', 'autoRotateRke2CertsSetting',
'supportBundleNodeCollectionTimeoutSetting' 'supportBundleNodeCollectionTimeoutSetting'
]; ];
// https://github.com/harvester/dashboard/releases/tag/v1.3.2 // https://github.com/harvester/dashboard/releases/tag/v1.3.2
const featuresV132 = [ const featuresV132 = [
'autoRotateRke2CertsSetting', ...featuresV131,
'supportBundleNodeCollectionTimeoutSetting',
'kubeconfigDefaultTokenTTLMinutesSetting', 'kubeconfigDefaultTokenTTLMinutesSetting',
'improveMaintenanceMode', 'improveMaintenanceMode',
]; ];
@ -22,9 +24,7 @@ const featuresV132 = [
// 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 featuresV140 = [ const featuresV140 = [
'autoRotateRke2CertsSetting', ...featuresV132,
'supportBundleNodeCollectionTimeoutSetting',
'kubeconfigDefaultTokenTTLMinutesSetting',
'cpuPinning', 'cpuPinning',
'usbPassthrough', 'usbPassthrough',
'volumeEncryption', 'volumeEncryption',

View File

@ -91,7 +91,9 @@ export default {
}, },
ksmtunedLink() { ksmtunedLink() {
return docLink(DOC.KSMTUNED_MODE, this.$store.getters); const version = this.$rootGetters['harvester-common/getServerVersion']();
return docLink(DOC.KSMTUNED_MODE, version);
} }
}, },

View File

@ -167,7 +167,9 @@ export default {
}, },
consoleDocLink() { consoleDocLink() {
return docLink(DOC.CONSOLE_URL, this.$store.getters); const version = this.$rootGetters['harvester-common/getServerVersion']();
return docLink(DOC.CONSOLE_URL, version);
} }
}, },
methods: { methods: {

View File

@ -15,7 +15,6 @@ import { ucFirst } from '@shell/utils/string';
import HarvesterResource from '../harvester'; import HarvesterResource from '../harvester';
import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../config/harvester'; import { PRODUCT_NAME as HARVESTER_PRODUCT } from '../../config/harvester';
import { HCI } from '../../types'; import { HCI } from '../../types';
import { featureEnabled } from '../../utils/feature-flags';
const ALLOW_SYSTEM_LABEL_KEYS = [ const ALLOW_SYSTEM_LABEL_KEYS = [
'topology.kubernetes.io/zone', 'topology.kubernetes.io/zone',
@ -371,7 +370,7 @@ export default class HciNode extends HarvesterResource {
} }
get cpuPinningFeatureEnabled() { get cpuPinningFeatureEnabled() {
return featureEnabled(this.$rootGetters, 'cpuPinning'); return this.$rootGetters['harvester-common/getFeatureEnabled']('cpuPinning');
} }
get isCPUManagerEnabled() { get isCPUManagerEnabled() {

View File

@ -13,7 +13,6 @@ import { parseVolumeClaimTemplates } from '@pkg/utils/vm';
import { BACKUP_TYPE } from '../config/types'; import { BACKUP_TYPE } from '../config/types';
import { HCI } from '../types'; import { HCI } from '../types';
import HarvesterResource from './harvester'; import HarvesterResource from './harvester';
import { featureEnabled } from '../utils/feature-flags';
export const OFF = 'Off'; export const OFF = 'Off';
@ -481,7 +480,7 @@ export default class VirtVm extends HarvesterResource {
} }
get cpuPinningFeatureEnabled() { get cpuPinningFeatureEnabled() {
return featureEnabled(this.$rootGetters, 'cpuPinning'); return this.$rootGetters['harvester-common/getFeatureEnabled']('cpuPinning');
} }
get isCpuPinning() { get isCpuPinning() {

View File

@ -76,7 +76,9 @@ export default {
}, },
rancherIntegrationLink() { rancherIntegrationLink() {
return docLink(DOC.RANCHER_INTEGRATION_URL, this.$store.getters); const version = this.$rootGetters['harvester-common/getServerVersion']();
return docLink(DOC.RANCHER_INTEGRATION_URL, version);
}, },
}, },

View File

@ -1,7 +1,7 @@
import Parse from 'url-parse'; import Parse from 'url-parse';
import { HCI } from '../types'; import { HCI } from '../types';
import { PRODUCT_NAME } from '../config/harvester'; import { PRODUCT_NAME } from '../config/harvester';
import { featureEnabled } from '../utils/feature-flags'; import { featureEnabled, featureVersion } from '../utils/feature-flags';
const state = function() { const state = function() {
return { return {
@ -71,8 +71,16 @@ const getters = {
return (name) => state.uploadingImageError[name]; return (name) => state.uploadingImageError[name];
}, },
getFeatureEnabled: (_state, _getters, _rootState, rootGetters) => (feature) => { getServerVersion: (_state, _getters, _rootState, rootGetters) => () => {
return featureEnabled(rootGetters, feature); const serverVersion = rootGetters['harvester/byId'](HCI.SETTING, 'server-version')?.value;
return featureVersion(serverVersion);
},
getFeatureEnabled: (_state, _getters, _rootState, rootGetters) => (feature, version) => {
const serverVersion = version || rootGetters['harvester/byId'](HCI.SETTING, 'server-version')?.value;
return featureEnabled(feature, serverVersion);
}, },
getHarvesterClusterUrl: (state, getters, rootState, rootGetters) => (url) => { getHarvesterClusterUrl: (state, getters, rootState, rootGetters) => (url) => {

View File

@ -1,24 +1,19 @@
import semver from 'semver'; import semver from 'semver';
import { HCI } from '../types';
import { RELEASE_FEATURES } from '../config/feature-flags'; import { RELEASE_FEATURES } from '../config/feature-flags';
export const docLink = (suffix, getter) => { export const docLink = (suffix, version) => {
const v = serverVersion(getter); const docVersion = `v${ semver.major(version) }.${ semver.minor(version) }`;
const docVersion = `v${ semver.major(v) }.${ semver.minor(v) }`;
return `https://docs.harvesterhci.io/${ docVersion }${ suffix }`; return `https://docs.harvesterhci.io/${ docVersion }${ suffix }`;
}; };
export function serverVersion(getters) { export function featureVersion(v) {
// e.g v1.4.0 // e.g v1.4.0
if (process.env.VUE_APP_SERVER_VERSION) { if (process.env.VUE_APP_SERVER_VERSION) {
return process.env.VUE_APP_SERVER_VERSION; return process.env.VUE_APP_SERVER_VERSION;
} }
try { try {
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 // fallback to the latest version
@ -26,8 +21,8 @@ export function serverVersion(getters) {
} }
} }
export const featureEnabled = (getters, featureKey) => { export const featureEnabled = (featureKey, serverVersion) => {
const version = serverVersion(getters); const version = featureVersion(serverVersion);
const releasedFeatures = RELEASE_FEATURES[version] || []; const releasedFeatures = RELEASE_FEATURES[version] || [];
return releasedFeatures.includes(featureKey); return releasedFeatures.includes(featureKey);