1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00
lens/extensions/node-menu/renderer.tsx
Sebastian Malton 3315114ddd finish poc
Signed-off-by: Sebastian Malton <sebastian@malton.name>
2021-04-19 10:42:53 -04:00

74 lines
1.9 KiB
TypeScript

import React from "react";
import { LensRendererExtension, Component, K8sApi } from "@k8slens/extensions";
const { Mui: { SvgIcon }, Icons, LensIcons } = Component;
function sendToTerminal(command: string) {
Component.terminalStore.sendCommand(command, {
enter: true,
newTab: true,
});
}
export default class NodeMenuRendererExtension extends LensRendererExtension {
kubeObjectMenuItems: LensRendererExtension["kubeObjectMenuItems"] = [
{
kind: "Node",
apiVersions: ["v1"],
Icon: () => <SvgIcon component={LensIcons.Ssh}/>,
text: "Shell",
onClick: (node: K8sApi.Node) => {
const nodeName = node.getName();
Component.createTerminalTab({
title: `Node: ${nodeName}`,
node: nodeName,
});
},
closeParent: true,
},
{
kind: "Node",
apiVersions: ["v1"],
when: (node: K8sApi.Node) => !node.isUnschedulable(),
Icon: Icons.PauseCircleFilled,
text: "Cordon",
onClick: (node: K8sApi.Node) => {
sendToTerminal(`kubectl cordon ${node.getName()}`);
},
closeParent: true,
},
{
kind: "Node",
apiVersions: ["v1"],
when: (node: K8sApi.Node) => node.isUnschedulable(),
Icon: Icons.PlayCircleFilled,
text: "Uncordon",
onClick: (node: K8sApi.Node) => {
sendToTerminal(`kubectl uncordon ${node.getName()}`);
},
closeParent: true,
},
{
kind: "Node",
apiVersions: ["v1"],
Icon: Icons.DeleteSweep,
text: "Drain",
onClick: (node: K8sApi.Node) => {
sendToTerminal(
`kubectl drain ${node.getName()} --delete-local-data --ignore-daemonsets --force`
);
},
confirmation: {
labelOk: "Drain Node",
Message: ({ object }) => (
<p>
Are you sure you want to drain <b>{object.getName()}</b>?
</p>
),
},
closeParent: true,
}
];
}