diff --git a/src/renderer/components/+nodes/index.ts b/src/renderer/components/+nodes/index.ts index 0a4b16e944..4a77b1c63b 100644 --- a/src/renderer/components/+nodes/index.ts +++ b/src/renderer/components/+nodes/index.ts @@ -1,4 +1,3 @@ export * from "./nodes" export * from "./nodes.route" -export * from "./node-menu" -export * from "./node-details" \ No newline at end of file +export * from "./node-details" diff --git a/src/renderer/components/+nodes/node-menu.tsx b/src/renderer/components/+nodes/node-menu.tsx deleted file mode 100644 index a45c38c840..0000000000 --- a/src/renderer/components/+nodes/node-menu.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import React from "react"; -import { t, Trans } from "@lingui/macro"; -import { Node } from "../../api/endpoints/nodes.api"; -import { createTerminalTab, terminalStore } from "../dock/terminal.store"; -import { KubeObjectMenu, KubeObjectMenuProps } from "../kube-object/kube-object-menu"; -import { ConfirmDialog } from "../confirm-dialog"; -import { MenuItem } from "../menu"; -import { Icon } from "../icon"; -import { _i18n } from "../../i18n"; -import { hideDetails } from "../../navigation"; - -export function NodeMenu(props: KubeObjectMenuProps) { - const { object: node, toolbar } = props; - if (!node) return null; - const nodeName = node.getName(); - - const sendToTerminal = (command: string) => { - terminalStore.sendCommand(command, { - enter: true, - newTab: true, - }); - hideDetails(); - } - - const shell = () => { - createTerminalTab({ - title: _i18n._(t`Node`) + `: ${nodeName}`, - node: nodeName, - }); - hideDetails(); - } - - const cordon = () => { - sendToTerminal(`kubectl cordon ${nodeName}`); - } - - const unCordon = () => { - sendToTerminal(`kubectl uncordon ${nodeName}`) - } - - const drain = () => { - const command = `kubectl drain ${nodeName} --delete-local-data --ignore-daemonsets --force`; - ConfirmDialog.open({ - ok: () => sendToTerminal(command), - labelOk: _i18n._(t`Drain Node`), - message: ( -

- Are you sure you want to drain {nodeName}? -

- ), - }) - } - - return ( - <> - - - Shell - - {!node.isUnschedulable() && ( - - - Cordon - - )} - {node.isUnschedulable() && ( - - - Uncordon - - )} - - - Drain - - - ); -} diff --git a/src/renderer/components/+nodes/nodes.tsx b/src/renderer/components/+nodes/nodes.tsx index a0db85309d..06a62abbc4 100644 --- a/src/renderer/components/+nodes/nodes.tsx +++ b/src/renderer/components/+nodes/nodes.tsx @@ -9,15 +9,13 @@ import { nodesStore } from "./nodes.store"; import { podsStore } from "../+workloads-pods/pods.store"; import { KubeObjectListLayout } from "../kube-object"; import { INodesRouteParams } from "./nodes.route"; -import { Node, nodesApi } from "../../api/endpoints/nodes.api"; -import { NodeMenu } from "./node-menu"; +import { Node } from "../../api/endpoints/nodes.api"; import { LineProgress } from "../line-progress"; import { _i18n } from "../../i18n"; import { bytesToUnits } from "../../utils/convertMemory"; import { Tooltip, TooltipPosition } from "../tooltip"; import kebabCase from "lodash/kebabCase"; import upperFirst from "lodash/upperFirst"; -import { kubeObjectMenuRegistry } from "../../api/kube-object-menu-registry" enum sortBy { name = "name", diff --git a/src/renderer/components/+workloads-pods/pod-menu.scss b/src/renderer/components/+workloads-pods/pod-menu.scss deleted file mode 100644 index 99cedad45f..0000000000 --- a/src/renderer/components/+workloads-pods/pod-menu.scss +++ /dev/null @@ -1,10 +0,0 @@ -.PodMenu { - .StatusBrick { - margin-right: $margin; - @include pod-status-bgs; - - &.running:not(.ready) { - background-color: $pod-status-pending-color; - } - } -} \ No newline at end of file diff --git a/src/renderer/components/+workloads-pods/pod-menu.tsx b/src/renderer/components/+workloads-pods/pod-menu.tsx deleted file mode 100644 index e880ff93e3..0000000000 --- a/src/renderer/components/+workloads-pods/pod-menu.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import "./pod-menu.scss"; - -import React from "react"; -import { t, Trans } from "@lingui/macro"; -import { MenuItem, SubMenu } from "../menu"; -import { IPodContainer, Pod } from "../../api/endpoints"; -import { Icon } from "../icon"; -import { StatusBrick } from "../status-brick"; -import { KubeObjectMenu, KubeObjectMenuProps } from "../kube-object/kube-object-menu"; -import { cssNames, prevDefault } from "../../utils"; -import { terminalStore, createTerminalTab } from "../dock/terminal.store"; -import { _i18n } from "../../i18n"; -import { hideDetails } from "../../navigation"; -import { createPodLogsTab } from "../dock/pod-logs.store"; -import { kubeObjectMenuRegistry } from "../../api/kube-object-menu-registry"; - -interface Props extends KubeObjectMenuProps { -} - -export class PodMenu extends React.Component { - async execShell(container?: string) { - hideDetails(); - const { object: pod } = this.props - const containerParam = container ? `-c ${container}` : "" - let command = `kubectl exec -i -t -n ${pod.getNs()} ${pod.getName()} ${containerParam} "--"` - if (window.navigator.platform !== "Win32") { - command = `exec ${command}` - } - if (pod.getSelectedNodeOs() === "windows") { - command = `${command} powershell` - } else { - command = `${command} sh -c "clear; (bash || ash || sh)"` - } - - const shell = createTerminalTab({ - title: _i18n._(t`Pod`) + `: ${pod.getName()} (namespace: ${pod.getNs()})` - }); - - terminalStore.sendCommand(command, { - enter: true, - tabId: shell.id - }); - } - - showLogs(container: IPodContainer) { - hideDetails(); - const pod = this.props.object; - createPodLogsTab({ - pod, - containers: pod.getContainers(), - initContainers: pod.getInitContainers(), - selectedContainer: container, - showTimestamps: false, - previous: false, - tailLines: 1000 - }); - } - - renderShellMenu() { - const { object: pod, toolbar } = this.props - const containers = pod.getRunningContainers(); - if (!containers.length) return; - return ( - this.execShell(containers[0].name))}> - - Shell - {containers.length > 1 && ( - <> - - - { - containers.map(container => { - const { name } = container; - return ( - this.execShell(name))} className="flex align-center"> - - {name} - - ) - }) - } - - - )} - - ) - } - - renderLogsMenu() { - const { object: pod, toolbar } = this.props - const containers = pod.getAllContainers(); - const statuses = pod.getContainerStatuses(); - if (!containers.length) return; - return ( - this.showLogs(containers[0]))}> - - Logs - {containers.length > 1 && ( - <> - - - { - containers.map(container => { - const { name } = container - const status = statuses.find(status => status.name === name); - const brick = status ? ( - - ) : null - return ( - this.showLogs(container))} className="flex align-center"> - {brick} - {name} - - ) - }) - } - - - )} - - ) - } - - render() { - return ( - <> - {this.renderShellMenu()} - {this.renderLogsMenu()} - - ) - } -} diff --git a/src/renderer/components/+workloads-pods/pods.tsx b/src/renderer/components/+workloads-pods/pods.tsx index d09813ba83..0d36c50c34 100644 --- a/src/renderer/components/+workloads-pods/pods.tsx +++ b/src/renderer/components/+workloads-pods/pods.tsx @@ -9,9 +9,8 @@ import { RouteComponentProps } from "react-router"; import { volumeClaimStore } from "../+storage-volume-claims/volume-claim.store"; import { IPodsRouteParams } from "../+workloads"; import { eventStore } from "../+events/event.store"; -import { KubeObjectListLayout, KubeObjectMenu } from "../kube-object"; -import { Pod, podsApi } from "../../api/endpoints"; -import { PodMenu } from "./pod-menu"; +import { KubeObjectListLayout } from "../kube-object"; +import { Pod } from "../../api/endpoints"; import { StatusBrick } from "../status-brick"; import { cssNames, stopPropagation } from "../../utils"; import { KubeEventIcon } from "../+events/kube-event-icon";