diff --git a/frontend/src/components/common/Terminal.tsx b/frontend/src/components/common/Terminal.tsx index 2ac979cf487..3631a71c04c 100644 --- a/frontend/src/components/common/Terminal.tsx +++ b/frontend/src/components/common/Terminal.tsx @@ -8,7 +8,7 @@ import MenuItem from '@material-ui/core/MenuItem'; import Select from '@material-ui/core/Select'; import { makeStyles } from '@material-ui/core/styles'; import _ from 'lodash'; -import React from 'react'; +import React, { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { Terminal as XTerminal } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; @@ -76,7 +76,7 @@ export default function Terminal(props: TerminalProps) { const { item, onClose, isAttach, ...other } = props; const classes = useStyle(); const [terminalContainerRef, setTerminalContainerRef] = React.useState(null); - const [container, setContainer] = React.useState(null); + const [container, setContainer] = useState(getDefaultContainer()); const execOrAttachRef = React.useRef(null); const fitAddonRef = React.useRef(null); const xtermRef = React.useRef(null); @@ -84,7 +84,7 @@ export default function Terminal(props: TerminalProps) { available: getAvailableShells(), currentIdx: 0, }); - const { t } = useTranslation(); + const { t } = useTranslation(['translation', 'glossary']); function getDefaultContainer() { return item.spec.containers.length > 0 ? item.spec.containers[0].name : ''; @@ -424,12 +424,36 @@ export default function Terminal(props: TerminalProps) { value={container !== null ? container : getDefaultContainer()} onChange={handleContainerChange} > - {item && - item.spec.containers.map(({ name }) => ( - - {name} - - ))} + {item?.spec?.containers && ( + + {t('glossary|Containers')} + + )} + {item?.spec?.containers.map(({ name }) => ( + + {name} + + ))} + {item?.spec?.initContainers && ( + + {t('translation|Init Containers')} + + )} + {item.spec.initContainers?.map(({ name }) => ( + + {name} + + ))} + {item?.spec?.ephemeralContainers && ( + + {t('glossary|Ephemeral Containers')} + + )} + {item.spec.ephemeralContainers?.map(({ name }) => ( + + {name} + + ))} diff --git a/frontend/src/components/pod/Details.tsx b/frontend/src/components/pod/Details.tsx index 5cbd699b719..4fddeccc466 100644 --- a/frontend/src/components/pod/Details.tsx +++ b/frontend/src/components/pod/Details.tsx @@ -170,12 +170,36 @@ function PodLogViewer(props: PodLogViewerProps) { value={container} onChange={handleContainerChange} > - {item && - item.spec.containers.map(({ name }) => ( - - {name} - - ))} + {item?.spec?.containers && ( + + {t('glossary|Containers')} + + )} + {item?.spec?.containers.map(({ name }) => ( + + {name} + + ))} + {item?.spec?.initContainers && ( + + {t('translation|Init Containers')} + + )} + {item.spec.initContainers?.map(({ name }) => ( + + {name} + + ))} + {item?.spec?.ephemeralContainers && ( + + {t('glossary|Ephemeral Containers')} + + )} + {item.spec.ephemeralContainers?.map(({ name }) => ( + + {name} + + ))} , diff --git a/frontend/src/i18n/locales/de/glossary.json b/frontend/src/i18n/locales/de/glossary.json index cbd4d62365b..07a6f6bd5c9 100644 --- a/frontend/src/i18n/locales/de/glossary.json +++ b/frontend/src/i18n/locales/de/glossary.json @@ -24,6 +24,7 @@ "Containers": "Container", "Container Spec": "Container-Spezifikation", "Container": "Container", + "Ephemeral Containers": "", "Config Maps": "Config Maps", "Definition": "Definition", "CRD: {{ crdName }}": "CRD: {{ crdName }}", diff --git a/frontend/src/i18n/locales/en/glossary.json b/frontend/src/i18n/locales/en/glossary.json index 5581e4c6763..d9b74a9ed9d 100644 --- a/frontend/src/i18n/locales/en/glossary.json +++ b/frontend/src/i18n/locales/en/glossary.json @@ -24,6 +24,7 @@ "Containers": "Containers", "Container Spec": "Container Spec", "Container": "Container", + "Ephemeral Containers": "Ephemeral Containers", "Config Maps": "Config Maps", "Definition": "Definition", "CRD: {{ crdName }}": "CRD: {{ crdName }}", diff --git a/frontend/src/i18n/locales/es/glossary.json b/frontend/src/i18n/locales/es/glossary.json index 92a0b8118f4..cdbf008cdd2 100644 --- a/frontend/src/i18n/locales/es/glossary.json +++ b/frontend/src/i18n/locales/es/glossary.json @@ -24,6 +24,7 @@ "Containers": "Contenedores", "Container Spec": "Espec. de Contenedor", "Container": "Contenedor", + "Ephemeral Containers": "", "Config Maps": "Config Maps", "Definition": "Definición", "CRD: {{ crdName }}": "CRD: {{ crdName }}", diff --git a/frontend/src/i18n/locales/fr/glossary.json b/frontend/src/i18n/locales/fr/glossary.json index 99dc064c4e9..9793da2abe6 100644 --- a/frontend/src/i18n/locales/fr/glossary.json +++ b/frontend/src/i18n/locales/fr/glossary.json @@ -24,6 +24,7 @@ "Containers": "Conteneurs", "Container Spec": "Spécifications des conteneurs", "Container": "Conteneur", + "Ephemeral Containers": "", "Config Maps": "Config Maps", "Definition": "Définition", "CRD: {{ crdName }}": "CRD: {{ crdName }}", diff --git a/frontend/src/i18n/locales/pt/glossary.json b/frontend/src/i18n/locales/pt/glossary.json index 01bf0e054ff..d1291864eda 100644 --- a/frontend/src/i18n/locales/pt/glossary.json +++ b/frontend/src/i18n/locales/pt/glossary.json @@ -24,6 +24,7 @@ "Containers": "Containers", "Container Spec": "Espec. de \"Container\"", "Container": "Container", + "Ephemeral Containers": "", "Config Maps": "Config Maps", "Definition": "Definição", "CRD: {{ crdName }}": "CRD: {{ crdName }}", diff --git a/frontend/src/lib/k8s/pod.ts b/frontend/src/lib/k8s/pod.ts index d5782a599dd..977d4f28806 100644 --- a/frontend/src/lib/k8s/pod.ts +++ b/frontend/src/lib/k8s/pod.ts @@ -15,7 +15,8 @@ export interface KubePodSpec { nodeSelector?: { [key: string]: string; }; - initContainers?: any[]; + initContainers?: KubeContainer[]; + ephemeralContainers?: KubeContainer[]; readinessGates?: { conditionType: string; }[];