-
Notifications
You must be signed in to change notification settings - Fork 1.4k
/
volume-details.tsx
125 lines (110 loc) · 3.71 KB
/
volume-details.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import startCase from "lodash/startCase";
import "./volume-details.scss";
import React from "react";
import { Link } from "react-router-dom";
import { observer } from "mobx-react";
import { DrawerItem, DrawerTitle } from "../drawer";
import { Badge } from "../badge";
import { PersistentVolume, persistentVolumeClaimApi, storageClassApi } from "../../../common/k8s-api/endpoints";
import type { KubeObjectDetailsProps } from "../kube-object-details";
import { KubeObjectMeta } from "../kube-object-meta";
import { getDetailsUrl } from "../kube-detail-params";
import logger from "../../../common/logger";
import { stopPropagation } from "../../../renderer/utils";
export interface PersistentVolumeDetailsProps extends KubeObjectDetailsProps<PersistentVolume> {
}
@observer
export class PersistentVolumeDetails extends React.Component<PersistentVolumeDetailsProps> {
render() {
const { object: volume } = this.props;
if (!volume) {
return null;
}
if (!(volume instanceof PersistentVolume)) {
logger.error("[PersistentVolumeDetails]: passed object that is not an instanceof PersistentVolume", volume);
return null;
}
const { accessModes, capacity, persistentVolumeReclaimPolicy, storageClassName, claimRef, flexVolume, mountOptions, nfs } = volume.spec;
const storageClassDetailsUrl = getDetailsUrl(storageClassApi.getUrl({
name: storageClassName,
}));
return (
<div className="PersistentVolumeDetails">
<KubeObjectMeta object={volume} />
<DrawerItem name="Capacity">
{capacity?.storage}
</DrawerItem>
{mountOptions && (
<DrawerItem name="Mount Options">
{mountOptions.join(", ")}
</DrawerItem>
)}
<DrawerItem name="Access Modes">
{accessModes?.join(", ")}
</DrawerItem>
<DrawerItem name="Reclaim Policy">
{persistentVolumeReclaimPolicy}
</DrawerItem>
<DrawerItem name="Storage Class Name">
<Link
key="link"
to={storageClassDetailsUrl}
onClick={stopPropagation}
>
{storageClassName}
</Link>
</DrawerItem>
<DrawerItem name="Status" labelsOnly>
<Badge label={volume.getStatus()} />
</DrawerItem>
{nfs && (
<>
<DrawerTitle>Network File System</DrawerTitle>
{
Object.entries(nfs).map(([name, value]) => (
<DrawerItem key={name} name={startCase(name)}>
{value}
</DrawerItem>
))
}
</>
)}
{flexVolume && (
<>
<DrawerTitle>FlexVolume</DrawerTitle>
<DrawerItem name="Driver">
{flexVolume.driver}
</DrawerItem>
{
Object.entries(flexVolume.options ?? {}).map(([name, value]) => (
<DrawerItem key={name} name={startCase(name)}>
{value}
</DrawerItem>
))
}
</>
)}
{claimRef && (
<>
<DrawerTitle>Claim</DrawerTitle>
<DrawerItem name="Type">
{claimRef.kind}
</DrawerItem>
<DrawerItem name="Name">
<Link to={getDetailsUrl(persistentVolumeClaimApi.getUrl(claimRef))}>
{claimRef.name}
</Link>
</DrawerItem>
<DrawerItem name="Namespace">
{claimRef.namespace}
</DrawerItem>
</>
)}
</div>
);
}
}