1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Correctly migrate duplicate clusters in workspaces (#3211)

- Keep track of the set of all workspaces that each duplicated entry was
  a part of

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-07-02 07:21:04 -04:00 committed by GitHub
parent b00afee15c
commit 05311c4b1b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 11 deletions

View File

@ -71,6 +71,11 @@ export interface ClusterModel {
*/
workspace?: string;
/**
* @deprecated this is used only for hotbar migrations from 4.2.X
*/
workspaces?: string[];
/** User context in kubeconfig */
contextName: string;

View File

@ -120,6 +120,10 @@ export class Cluster implements ClusterModel, ClusterState {
* @deprecated
*/
@observable workspace: string;
/**
* @deprecated
*/
@observable workspaces: string[];
/**
* Kubernetes API server URL
*
@ -294,6 +298,10 @@ export class Cluster implements ClusterModel, ClusterState {
this.workspace = model.workspace;
}
if (model.workspaces) {
this.workspaces = model.workspaces;
}
if (model.contextName) {
this.contextName = model.contextName;
}
@ -589,6 +597,7 @@ export class Cluster implements ClusterModel, ClusterState {
contextName: this.contextName,
kubeConfigPath: this.kubeConfigPath,
workspace: this.workspace,
workspaces: this.workspaces,
preferences: this.preferences,
metadata: this.metadata,
accessibleNamespaces: this.accessibleNamespaces,

View File

@ -63,8 +63,16 @@ function mergeLabels(left: Record<string, string>, right: Record<string, string>
};
}
function mergeSet(left: Iterable<string>, right: Iterable<string>): string[] {
return [...new Set([...left, ...right])];
function mergeSet(...iterables: Iterable<string>[]): string[] {
const res = new Set<string>();
for (const iterable of iterables) {
for (const val of iterable) {
res.add(val);
}
}
return [...res];
}
function mergeClusterModel(prev: ClusterModel, right: Omit<ClusterModel, "id">): ClusterModel {
@ -77,6 +85,7 @@ function mergeClusterModel(prev: ClusterModel, right: Omit<ClusterModel, "id">):
labels: mergeLabels(prev.labels ?? {}, right.labels ?? {}),
accessibleNamespaces: mergeSet(prev.accessibleNamespaces ?? [], right.accessibleNamespaces ?? []),
workspace: prev.workspace || right.workspace,
workspaces: mergeSet([prev.workspace, right.workspace], prev.workspaces ?? [], right.workspaces ?? []),
};
}
@ -113,6 +122,7 @@ export default {
clusters.set(newId, {
...cluster,
id: newId,
workspaces: [cluster.workspace].filter(Boolean),
});
moveStorageFolder({ folder, newId, oldId });
}

View File

@ -71,7 +71,9 @@ export default {
for (const cluster of clusters) {
const uid = generateNewIdFor(cluster);
const workspaceHotbar = workspaceHotbars.get(cluster.workspace);
for (const workspaceId of cluster.workspaces ?? [cluster.workspace].filter(Boolean)) {
const workspaceHotbar = workspaceHotbars.get(workspaceId);
migrationLog(`Adding cluster ${uid} to ${workspaceHotbar.name}`);
@ -84,6 +86,7 @@ export default {
});
}
}
}
for (const hotbar of workspaceHotbars.values()) {
if (hotbar.items.length === 0) {