Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clickable links in pods details for ServiceAccount, PriorityClass and RuntimeClass #6352

Merged
merged 6 commits into from Oct 11, 2022
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/common/k8s-api/endpoints/legacy-globals.ts
Expand Up @@ -11,9 +11,12 @@ import networkPolicyApiInjectable from "./network-policy.api.injectable";
import nodeApiInjectable from "./node.api.injectable";
import persistentVolumeClaimApiInjectable from "./persistent-volume-claim.api.injectable";
import podApiInjectable from "./pod.api.injectable";
import priorityClassApiInjectable from "./priority-class.api.injectable";
import resourceQuotaApiInjectable from "./resource-quota.api.injectable";
import roleApiInjectable from "./role.api.injectable";
import runtimeClassApiInjectable from "./runtime-class.api.injectable";
import secretApiInjectable from "./secret.api.injectable";
import serviceAccountApiInjectable from "./service-account.api.injectable";
import serviceApiInjectable from "./service.api.injectable";
import storageClassApiInjectable from "./storage-class.api.injectable";

Expand Down Expand Up @@ -57,16 +60,31 @@ export const nodeApi = asLegacyGlobalForExtensionApi(nodeApiInjectable);
*/
export const persistentVolumeClaimApi = asLegacyGlobalForExtensionApi(persistentVolumeClaimApiInjectable);

/**
* @deprecated use `di.inject(priorityClassApiInjectable)` instead
*/
export const priorityClassApi = asLegacyGlobalForExtensionApi(priorityClassApiInjectable);

/**
* @deprecated use `di.inject(resourceQuotaApiInjectable)` instead
*/
export const resourceQuotaApi = asLegacyGlobalForExtensionApi(resourceQuotaApiInjectable);

/**
* @deprecated use `di.inject(runtimeClassApiInjectable)` instead
*/
export const runtimeClassApi = asLegacyGlobalForExtensionApi(runtimeClassApiInjectable);

/**
* @deprecated use `di.inject(secretApiInjectable)` instead
*/
export const secretApi = asLegacyGlobalForExtensionApi(secretApiInjectable);

/**
* @deprecated use `di.inject(serviceAccountApiInjectable)` instead
*/
export const serviceAccountApi = asLegacyGlobalForExtensionApi(serviceAccountApiInjectable);

/**
* @deprecated use `di.inject(serviceApiInjectable)` instead
*/
Expand Down
46 changes: 39 additions & 7 deletions src/renderer/components/+workloads-pods/pod-details.tsx
Expand Up @@ -10,11 +10,11 @@ import kebabCase from "lodash/kebabCase";
import { disposeOnUnmount, observer } from "mobx-react";
import { Link } from "react-router-dom";
import { observable, reaction, makeObservable } from "mobx";
import { Pod, priorityClassApi, runtimeClassApi, serviceAccountApi } from "../../../common/k8s-api/endpoints";
import type { NodeApi } from "../../../common/k8s-api/endpoints";
import { Pod } from "../../../common/k8s-api/endpoints";
import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge";
import { cssNames, toJS } from "../../utils";
import { cssNames, stopPropagation, toJS } from "../../utils";
import { PodDetailsContainer } from "./pod-details-container";
import { PodDetailsAffinities } from "./pod-details-affinities";
import { PodDetailsTolerations } from "./pod-details-tolerations";
Expand Down Expand Up @@ -94,6 +94,20 @@ class NonInjectedPodDetails extends React.Component<PodDetailsProps & Dependenci
const initContainers = pod.getInitContainers();
const containers = pod.getContainers();

const priorityClassName = pod.getPriorityClassName();
const runtimeClassName = pod.getRuntimeClassName();
const serviceAccountName = pod.getServiceAccountName();

const priorityClassDetailsUrl = getDetailsUrl(priorityClassApi.getUrl({
name: priorityClassName,
}));
const runtimeClassDetailsUrl = getDetailsUrl(runtimeClassApi.getUrl({
name: runtimeClassName,
}));
const serviceAccountDetailsUrl = getDetailsUrl(serviceAccountApi.getUrl({
name: serviceAccountName,
}));
Nokel81 marked this conversation as resolved.
Show resolved Hide resolved

return (
<div className="PodDetails">
{!isMetricHidden && (
Expand Down Expand Up @@ -130,16 +144,34 @@ class NonInjectedPodDetails extends React.Component<PodDetailsProps & Dependenci
{podIPs.map(label => <Badge key={label} label={label} />)}
</DrawerItem>
<DrawerItem name="Service Account">
{pod.getServiceAccountName()}
<Link
key="link"
to={serviceAccountDetailsUrl}
onClick={stopPropagation}
>
{serviceAccountName}
</Link>
</DrawerItem>
<DrawerItem name="Priority Class" hidden={pod.getPriorityClassName() === ""}>
{pod.getPriorityClassName()}
<DrawerItem name="Priority Class" hidden={priorityClassName === ""}>
<Link
key="link"
to={priorityClassDetailsUrl}
onClick={stopPropagation}
>
{priorityClassName}
</Link>
</DrawerItem>
<DrawerItem name="QoS Class">
{pod.getQosClass()}
</DrawerItem>
<DrawerItem name="Runtime Class" hidden={pod.getRuntimeClassName() === ""}>
{pod.getRuntimeClassName()}
<DrawerItem name="Runtime Class" hidden={runtimeClassName === ""}>
<Link
key="link"
to={runtimeClassDetailsUrl}
onClick={stopPropagation}
>
{runtimeClassName}
</Link>
</DrawerItem>

<DrawerItem
Expand Down