import React from "react";
import { LensRendererExtension, Component, K8sApi } from "@k8slens/extensions";
import { Subject } from "@material-ui/icons";
const { Mui: { SvgIcon }, LensIcons } = Component;
function execShell(pod: K8sApi.Pod, container: K8sApi.IPodContainer) {
let command = `kubectl exec -i -t -n ${pod.getNs()} ${pod.getName()} -c ${container.name} "--"`;
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 = Component.createTerminalTab({
title: `Pod: ${pod.getName()} (namespace: ${pod.getNs()})`
});
Component.terminalStore.sendCommand(command, {
enter: true,
tabId: shell.id
});
}
export default class PodMenuRendererExtension extends LensRendererExtension {
kubeObjectMenuItems: LensRendererExtension["kubeObjectMenuItems"] = [
{
kind: "Pod",
apiVersions: ["v1"],
text: "Pod Shell",
Icon: () => ,
when: (pod: K8sApi.Pod) => pod.getRunningContainers().length === 1,
onClick: (pod: K8sApi.Pod) => execShell(pod, pod.getRunningContainers()[0]),
closeParent: true,
},
{
kind: "Pod",
apiVersions: ["v1"],
text: "Pod Shells",
Icon: () => ,
when: (pod: K8sApi.Pod) => pod.getRunningContainers().length > 1,
children: (pod: K8sApi.Pod) => (
pod.getRunningContainers()
.map(container => ({
text: container.name,
Icon: () => ,
onClick: () => execShell(pod, container),
closeParent: true,
}))
),
},
{
kind: "Pod",
apiVersions: ["v1"],
text: "Logs",
Icon: Subject,
when: (pod: K8sApi.Pod) => pod.getAllContainers().length === 1,
onClick: (pod: K8sApi.Pod) => (
Component.logTabStore.createPodTab({
selectedPod: pod,
selectedContainer: pod.getAllContainers()[0],
})
),
closeParent: true,
},
{
kind: "Pod",
apiVersions: ["v1"],
text: "Logs",
Icon: Subject,
when: (pod: K8sApi.Pod) => pod.getAllContainers().length > 1,
children: (pod: K8sApi.Pod) => (
pod.getAllContainers()
.map(container => ({
text: container.name,
Icon: Subject,
onClick: () => (
Component.logTabStore.createPodTab({
selectedPod: pod,
selectedContainer: container,
})
),
closeParent: true,
}))
),
closeParent: true,
},
];
}