1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Clickable StorageClass (#6410)

Signed-off-by: Piotr Roszatycki <piotr.roszatycki@gmail.com>

Signed-off-by: Piotr Roszatycki <piotr.roszatycki@gmail.com>
This commit is contained in:
Piotr Roszatycki 2022-10-14 08:32:56 +02:00 committed by GitHub
parent 491082f784
commit 19a18ebe2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 9 deletions

View File

@ -14,7 +14,7 @@ import { Link } from "react-router-dom";
import { ResourceMetrics } from "../resource-metrics"; import { ResourceMetrics } from "../resource-metrics";
import { VolumeClaimDiskChart } from "./volume-claim-disk-chart"; import { VolumeClaimDiskChart } from "./volume-claim-disk-chart";
import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { KubeObjectDetailsProps } from "../kube-object-details";
import { PersistentVolumeClaim } from "../../../common/k8s-api/endpoints"; import { PersistentVolumeClaim, storageClassApi } from "../../../common/k8s-api/endpoints";
import { ClusterMetricsResourceType } from "../../../common/cluster-types"; import { ClusterMetricsResourceType } from "../../../common/cluster-types";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
@ -27,6 +27,7 @@ import type { PodStore } from "../+workloads-pods/store";
import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable"; import getActiveClusterEntityInjectable from "../../api/catalog/entity/get-active-cluster-entity.injectable";
import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable";
import podStoreInjectable from "../+workloads-pods/store.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable";
import { stopPropagation } from "../../../renderer/utils";
export interface PersistentVolumeClaimDetailsProps extends KubeObjectDetailsProps<PersistentVolumeClaim> { export interface PersistentVolumeClaimDetailsProps extends KubeObjectDetailsProps<PersistentVolumeClaim> {
} }
@ -78,6 +79,10 @@ class NonInjectedPersistentVolumeClaimDetails extends React.Component<Persistent
const pods = volumeClaim.getPods(podStore.items); const pods = volumeClaim.getPods(podStore.items);
const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim); const isMetricHidden = getActiveClusterEntity()?.isMetricHidden(ClusterMetricsResourceType.VolumeClaim);
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
name: storageClassName,
}));
return ( return (
<div className="PersistentVolumeClaimDetails"> <div className="PersistentVolumeClaimDetails">
{!isMetricHidden && ( {!isMetricHidden && (
@ -89,15 +94,21 @@ class NonInjectedPersistentVolumeClaimDetails extends React.Component<Persistent
object={volumeClaim} object={volumeClaim}
metrics={this.metrics} metrics={this.metrics}
> >
<VolumeClaimDiskChart/> <VolumeClaimDiskChart />
</ResourceMetrics> </ResourceMetrics>
)} )}
<KubeObjectMeta object={volumeClaim}/> <KubeObjectMeta object={volumeClaim} />
<DrawerItem name="Access Modes"> <DrawerItem name="Access Modes">
{accessModes?.join(", ")} {accessModes?.join(", ")}
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage Class Name"> <DrawerItem name="Storage Class Name">
{storageClassName} <Link
key="link"
to={storageClassDetailsUrl}
onClick={stopPropagation}
>
{storageClassName}
</Link>
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage"> <DrawerItem name="Storage">
{volumeClaim.getStorage()} {volumeClaim.getStorage()}
@ -116,7 +127,7 @@ class NonInjectedPersistentVolumeClaimDetails extends React.Component<Persistent
<DrawerTitle>Selector</DrawerTitle> <DrawerTitle>Selector</DrawerTitle>
<DrawerItem name="Match Labels" labelsOnly> <DrawerItem name="Match Labels" labelsOnly>
{volumeClaim.getMatchLabels().map(label => <Badge key={label} label={label}/>)} {volumeClaim.getMatchLabels().map(label => <Badge key={label} label={label} />)}
</DrawerItem> </DrawerItem>
<DrawerItem name="Match Expressions"> <DrawerItem name="Match Expressions">

View File

@ -11,11 +11,12 @@ import { Link } from "react-router-dom";
import { observer } from "mobx-react"; import { observer } from "mobx-react";
import { DrawerItem, DrawerTitle } from "../drawer"; import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge"; import { Badge } from "../badge";
import { PersistentVolume, persistentVolumeClaimApi } from "../../../common/k8s-api/endpoints"; import { PersistentVolume, persistentVolumeClaimApi, storageClassApi } from "../../../common/k8s-api/endpoints";
import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { KubeObjectDetailsProps } from "../kube-object-details";
import { KubeObjectMeta } from "../kube-object-meta"; import { KubeObjectMeta } from "../kube-object-meta";
import { getDetailsUrl } from "../kube-detail-params"; import { getDetailsUrl } from "../kube-detail-params";
import logger from "../../../common/logger"; import logger from "../../../common/logger";
import { stopPropagation } from "../../../renderer/utils";
export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> { export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> {
} }
@ -37,9 +38,13 @@ export class PersistentVolumeDetails extends React.Component<PersistentVolumeDet
const { accessModes, capacity, persistentVolumeReclaimPolicy, storageClassName, claimRef, flexVolume, mountOptions, nfs } = volume.spec; const { accessModes, capacity, persistentVolumeReclaimPolicy, storageClassName, claimRef, flexVolume, mountOptions, nfs } = volume.spec;
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
name: storageClassName,
}));
return ( return (
<div className="PersistentVolumeDetails"> <div className="PersistentVolumeDetails">
<KubeObjectMeta object={volume}/> <KubeObjectMeta object={volume} />
<DrawerItem name="Capacity"> <DrawerItem name="Capacity">
{capacity?.storage} {capacity?.storage}
</DrawerItem> </DrawerItem>
@ -57,10 +62,16 @@ export class PersistentVolumeDetails extends React.Component<PersistentVolumeDet
{persistentVolumeReclaimPolicy} {persistentVolumeReclaimPolicy}
</DrawerItem> </DrawerItem>
<DrawerItem name="Storage Class Name"> <DrawerItem name="Storage Class Name">
{storageClassName} <Link
key="link"
to={storageClassDetailsUrl}
onClick={stopPropagation}
>
{storageClassName}
</Link>
</DrawerItem> </DrawerItem>
<DrawerItem name="Status" labelsOnly> <DrawerItem name="Status" labelsOnly>
<Badge label={volume.getStatus()}/> <Badge label={volume.getStatus()} />
</DrawerItem> </DrawerItem>
{nfs && ( {nfs && (