import React from "react"; import { Component, K8sApi, Navigation} from "@k8slens/extensions" export interface NodeMenuProps extends Component.KubeObjectMenuProps { } export function NodeMenu(props: NodeMenuProps) { const { object: node, toolbar } = props; if (!node) return null; const nodeName = node.getName(); const sendToTerminal = (command: string) => { Component.terminalStore.sendCommand(command, { enter: true, newTab: true, }); Navigation.hideDetails(); } const shell = () => { Component.createTerminalTab({ title: `Node: ${nodeName}`, node: nodeName, }); Navigation.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`; Component.ConfirmDialog.open({ ok: () => sendToTerminal(command), labelOk: `Drain Node`, message: (

Are you sure you want to drain {nodeName}?

), }) } return ( <> Shell {!node.isUnschedulable() && ( Cordon )} {node.isUnschedulable() && ( Uncordon )} Drain ); }