Cody Jackson 2d2615128c
Putting in some temporary workarounds regarding the typesystem
Without these changes we can't build the app using `yarn build-pkg harvester` because it complains about missing modules in @rancher/shell imports. I believe this will be resolved by https://github.com/rancher/dashboard/issues/11797#issue-2502509655 and we should remove this change once that occurs.
2024-10-23 17:00:57 +02:00

144 lines
4.2 KiB
TypeScript

//@ts-nocheck
import { ClusterNotFoundError } from '@shell/utils/error';
import { SETTING } from '@shell/config/settings';
import { COUNT, NAMESPACE, MANAGEMENT } from '@shell/config/types';
import { allHash } from '@shell/utils/promise';
import { DEV } from '@shell/store/prefs';
import { HCI } from '../../types';
export default {
async loadCluster({
state, commit, dispatch, getters, rootGetters, rootState
}: any, { id }: any) {
// This is a workaround for a timing issue where the mgmt cluster schema may not be available
// Try and wait until the schema exists before proceeding
await dispatch('management/waitForSchema', { type: MANAGEMENT.CLUSTER }, { root: true });
// See if it really exists
const cluster = await dispatch('management/find', {
type: MANAGEMENT.CLUSTER,
id,
opt: { url: `${MANAGEMENT.CLUSTER}s/${escape(id)}` }
}, { root: true });
let virtualBase = `/k8s/clusters/${escape(id)}/v1/harvester`;
if (id === 'local') {
virtualBase = `/v1/harvester`;
}
if (!cluster) {
commit('clusterId', null, { root: true });
commit('applyConfig', { baseUrl: null });
throw new ClusterNotFoundError(id);
}
// Update the Steve client URLs
commit('applyConfig', { baseUrl: virtualBase });
await Promise.all([
dispatch('loadSchemas', true),
]);
dispatch('subscribe');
const projectArgs = {
type: MANAGEMENT.PROJECT,
opt: {
url: `${MANAGEMENT.PROJECT}/${escape(id)}`,
watchNamespace: id
}
};
const fetchProjects = async () => {
let limit = 30000;
const sleep = 100;
while (limit > 0 && !rootState.managementReady) {
await setTimeout(() => { }, sleep);
limit -= sleep;
}
if (rootGetters['management/schemaFor'](MANAGEMENT.PROJECT)) {
return dispatch('management/findAll', projectArgs, { root: true });
}
};
if (id !== 'local' && getters['schemaFor'](MANAGEMENT.SETTING)) { // multi-cluster
const settings = await dispatch('findAll', {
type: MANAGEMENT.SETTING,
id: SETTING.SYSTEM_NAMESPACES,
opt: { url: `${virtualBase}/${MANAGEMENT.SETTING}s/`, force: true }
});
const systemNamespaces = settings?.find((x: any) => x.id === SETTING.SYSTEM_NAMESPACES);
if (systemNamespaces) {
const namespace = (systemNamespaces.value || systemNamespaces.default)?.split(',');
commit('setSystemNamespaces', namespace, { root: true });
}
}
const hash: { [key: string]: Promise<any> } = {
projects: fetchProjects(),
virtualCount: dispatch('findAll', { type: COUNT }),
virtualNamespaces: dispatch('findAll', { type: NAMESPACE }),
settings: dispatch('findAll', { type: HCI.SETTING }),
clusters: dispatch('management/findAll', {
type: MANAGEMENT.CLUSTER,
opt: { force: true }
}, { root: true }),
};
if (getters['schemaFor'](HCI.UPGRADE)) {
hash.upgrades = dispatch('findAll', { type: HCI.UPGRADE });
}
const res: any = await allHash(hash);
await dispatch('cleanNamespaces', null, { root: true });
commit('updateNamespaces', {
filters: [],
all: getters.filterNamespace(),
getters
}, { root: true });
// Solve compatibility with Rancher v2.6.x, fell remove these codes after not support v2.6.x
const definition = {
def: false,
parseJSON: true,
inheritFrom: DEV,
asUserPreference: true,
};
commit('prefs/setDefinition', {
name: 'view-in-api',
definition,
}, { root: true });
commit('prefs/setDefinition', {
name: 'all-namespaces',
definition,
}, { root: true });
commit('prefs/setDefinition', {
name: 'theme-shortcut',
definition,
}, { root: true });
commit('prefs/setDefinition', {
name: 'plugin-developer',
definition,
}, { root: true });
const isMultiCluster = !(res.clusters.length === 1 && res.clusters[0].metadata?.name === 'local');
if (isMultiCluster) {
commit('managementChanged', {
ready: true,
isMultiCluster: true,
isRancher: true,
}, { root: true });
}
},
};