mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Fix local cluster delete flow (#3473)
* Fix local cluster delete flow - Now checks for the cluster being the current cluster and confirms the action - <ConfirmDialog> is fixed to work with several confirmations happinging at once Signed-off-by: Sebastian Malton <sebastian@malton.name> * Custom delete cluster dialog Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Saving kubeconfig file refactoring Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Switching current-context from dialog Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Cleaning up css styles Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Show Delete menu item only for local cluster Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Make all dialogs rounded Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Releasing kubeconfig file after lock Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Adding delete cluster dialog tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Cleaning up Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Delete cluster dialog refactoring Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Fixing typo Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Removing temp file on error Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Updating tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Do not switch context if select is hidden Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Removing spread symbols Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Moving cluster delete event from catalog initializer to ipc Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Refactor warning messages Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Getting spread (...) back to fix Select render Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Using async form without promises Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Do not show context switcher if no contexts left Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * Updating the tests Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> * don't allow delete of the active cluster before setting to new active cluster (#3749) * don't allow user to delete the active cluster before setting to new active cluster Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * fix lint issues Signed-off-by: Jim Ehrismann <jehrismann@mirantis.com> * Show delete button if no more contexts available Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Signed-off-by: Alex Andreev <alex.andreev.email@gmail.com> Co-authored-by: Alex Andreev <alex.andreev.email@gmail.com> Co-authored-by: Jim Ehrismann <40840436+jim-docker@users.noreply.github.com>
This commit is contained in:
16 files changed
+751
-40
No files matched your search
+5
-1
@@ -32,9 +32,9 @@ import logger from "./logger";
|
||||
import { VersionDetector } from "./cluster-detectors/version-detector";
|
||||
import { DetectorRegistry } from "./cluster-detectors/detector-registry";
|
||||
import plimit from "p-limit";
|
||||
import { toJS } from "../common/utils";
|
||||
import type { ClusterState, ClusterRefreshOptions, ClusterMetricsResourceType, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel } from "../common/cluster-types";
|
||||
import { ClusterMetadataKey, initialNodeShellImage, ClusterStatus } from "../common/cluster-types";
|
||||
import { storedKubeConfigFolder, toJS } from "../common/utils";
|
||||
|
||||
/**
|
||||
* Cluster
|
||||
@@ -739,4 +739,8 @@ export class Cluster implements ClusterModel, ClusterState {
|
||||
get imagePullSecret(): string | undefined {
|
||||
return this.preferences?.imagePullSecret;
|
||||
}
|
||||
|
||||
isInLocalKubeconfig() {
|
||||
return this.kubeConfigPath.startsWith(storedKubeConfigFolder());
|
||||
}
|
||||
}
|
||||
@@ -22,17 +22,14 @@
|
||||
import { BrowserWindow, dialog, IpcMainInvokeEvent } from "electron";
|
||||
import { KubernetesCluster } from "../../common/catalog-entities";
|
||||
import { clusterFrameMap } from "../../common/cluster-frames";
|
||||
import { clusterActivateHandler, clusterSetFrameIdHandler, clusterVisibilityHandler, clusterRefreshHandler, clusterDisconnectHandler, clusterKubectlApplyAllHandler, clusterKubectlDeleteAllHandler, clusterDeleteHandler } from "../../common/cluster-ipc";
|
||||
import { ClusterStore } from "../../common/cluster-store";
|
||||
import { clusterActivateHandler, clusterSetFrameIdHandler, clusterVisibilityHandler, clusterRefreshHandler, clusterDisconnectHandler, clusterKubectlApplyAllHandler, clusterKubectlDeleteAllHandler, clusterDeleteHandler, clusterSetDeletingHandler, clusterClearDeletingHandler } from "../../common/cluster-ipc";
|
||||
import type { ClusterId } from "../../common/cluster-types";
|
||||
import { ClusterStore } from "../../common/cluster-store";
|
||||
import { appEventBus } from "../../common/event-bus";
|
||||
import { dialogShowOpenDialogHandler, ipcMainHandle } from "../../common/ipc";
|
||||
import { catalogEntityRegistry } from "../catalog";
|
||||
import { pushCatalogToRenderer } from "../catalog-pusher";
|
||||
import { ClusterManager } from "../cluster-manager";
|
||||
import { bundledKubectlPath } from "../kubectl";
|
||||
import logger from "../logger";
|
||||
import { promiseExecFile } from "../promise-exec";
|
||||
import { ResourceApplier } from "../resource-applier";
|
||||
import { WindowManager } from "../window-manager";
|
||||
|
||||
@@ -82,7 +79,7 @@ export function initIpcMainHandlers() {
|
||||
}
|
||||
});
|
||||
|
||||
ipcMainHandle(clusterDeleteHandler, async (event, clusterId: ClusterId) => {
|
||||
ipcMainHandle(clusterDeleteHandler, (event, clusterId: ClusterId) => {
|
||||
appEventBus.emit({ name: "cluster", action: "remove" });
|
||||
const cluster = ClusterStore.getInstance().getById(clusterId);
|
||||
|
||||
@@ -90,19 +87,16 @@ export function initIpcMainHandlers() {
|
||||
return;
|
||||
}
|
||||
|
||||
ClusterManager.getInstance().deleting.add(clusterId);
|
||||
cluster.disconnect();
|
||||
clusterFrameMap.delete(cluster.id);
|
||||
const kubectlPath = bundledKubectlPath();
|
||||
const args = ["config", "delete-context", cluster.contextName, "--kubeconfig", cluster.kubeConfigPath];
|
||||
});
|
||||
|
||||
try {
|
||||
await promiseExecFile(kubectlPath, args);
|
||||
} catch ({ stderr }) {
|
||||
logger.error(`[CLUSTER-REMOVE]: failed to remove cluster: ${stderr}`, { clusterId, context: cluster.contextName });
|
||||
ipcMainHandle(clusterSetDeletingHandler, (event, clusterId: string) => {
|
||||
ClusterManager.getInstance().deleting.add(clusterId);
|
||||
});
|
||||
|
||||
throw `Failed to remove cluster: ${stderr}`;
|
||||
}
|
||||
ipcMainHandle(clusterClearDeletingHandler, (event, clusterId: string) => {
|
||||
ClusterManager.getInstance().deleting.delete(clusterId);
|
||||
});
|
||||
|
||||
ipcMainHandle(clusterKubectlApplyAllHandler, async (event, clusterId: ClusterId, resources: string[], extraArgs: string[]) => {
|
||||
|
||||
Reference in new issue
Block a user