mirror of https://github.com/rancher/dashboard.git
93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
import semver from 'semver';
|
|
import { CAPI } from '@shell/config/labels-annotations';
|
|
import { MANAGEMENT, VIRTUAL_HARVESTER_PROVIDER } from '@shell/config/types';
|
|
import { SETTING } from '@shell/config/settings';
|
|
|
|
// Filter out any clusters that are not Kubernetes Clusters
|
|
export function filterOnlyKubernetesClusters(mgmtClusters, store) {
|
|
const openHarvesterContainerWorkload = store.getters['features/get']('harvester-baremetal-container-workload');
|
|
|
|
return mgmtClusters?.filter((c) => {
|
|
return openHarvesterContainerWorkload ? true : !isHarvesterCluster(c);
|
|
});
|
|
}
|
|
|
|
export function isHarvesterCluster(mgmtCluster) {
|
|
// Use the provider if it is set otherwise use the label
|
|
const provider = mgmtCluster?.metadata?.labels?.[CAPI.PROVIDER] || mgmtCluster?.status?.provider;
|
|
|
|
return provider === VIRTUAL_HARVESTER_PROVIDER;
|
|
}
|
|
|
|
export function isHarvesterSatisfiesVersion(version = '') {
|
|
if (version.startsWith('v1.21.4+rke2r')) {
|
|
const rkeVersion = version.replace(/.+rke2r/i, '');
|
|
|
|
return Number(rkeVersion) >= 4;
|
|
} else {
|
|
return semver.satisfies(semver.coerce(version), '>=v1.21.4+rke2r4');
|
|
}
|
|
}
|
|
|
|
export function filterHiddenLocalCluster(mgmtClusters, store) {
|
|
const hideLocalSetting = store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.HIDE_LOCAL_CLUSTER) || {};
|
|
const value = hideLocalSetting.value || hideLocalSetting.default || 'false';
|
|
const hideLocal = value === 'true';
|
|
|
|
if (!hideLocal) {
|
|
return mgmtClusters;
|
|
}
|
|
|
|
return mgmtClusters.filter((c) => {
|
|
const target = c.mgmt || c;
|
|
|
|
return !target.isLocal;
|
|
});
|
|
}
|
|
|
|
const clusterNameSegments = /([A-Za-z]+|\d+)/g;
|
|
|
|
/**
|
|
* Shortens an input string based on the number of segments it contains.
|
|
* @param {string} input - The input string to be shortened.
|
|
* @returns {string} - The shortened string.
|
|
* @example smallIdentifier('local') => 'lcl'
|
|
* @example smallIdentifier('word-wide-web') => 'www'
|
|
*/
|
|
export function abbreviateClusterName(input) {
|
|
if (!input) {
|
|
return '';
|
|
}
|
|
|
|
if (input.length <= 3) {
|
|
return input;
|
|
}
|
|
|
|
const segments = input.match(clusterNameSegments);
|
|
|
|
if (!segments) return ''; // In case no valid segments are found
|
|
|
|
let result = '';
|
|
|
|
switch (segments.length) {
|
|
case 1: {
|
|
const word = segments[0];
|
|
|
|
result = `${ word[0] }${ word[Math.floor(word.length / 2)] }${ word[word.length - 1] }`;
|
|
break;
|
|
}
|
|
case 2: {
|
|
const w1 = `${ segments[0][0] }`;
|
|
const w2 = `${ segments[0].length >= 2 ? segments[0][segments[0].length - 1] : segments[1][0] }`;
|
|
const w3 = `${ segments[1][segments[1].length - 1] }`;
|
|
|
|
result = w1 + w2 + w3;
|
|
break;
|
|
}
|
|
default:
|
|
result = segments.slice(0, 2).map((segment) => segment[0]).join('') + segments.slice(-1)[0].slice(-1);
|
|
}
|
|
|
|
return result;
|
|
}
|