Skip to content

Commit

Permalink
Bug 1871736: Fixes clone for block mode PVCs
Browse files Browse the repository at this point in the history
Signed-off-by: Kanika Murarka <kmurarka@redhat.com>
  • Loading branch information
Kanika Murarka committed Sep 16, 2020
1 parent 88e16a1 commit a8ea197
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 16 deletions.
Expand Up @@ -3,7 +3,7 @@ import './_clone-pvc-modal.scss';
import * as React from 'react';

import { Form, FormGroup, TextInput } from '@patternfly/react-core';
import { K8sResourceKind, k8sCreate, referenceFor } from '@console/internal/module/k8s';
import { k8sCreate, referenceFor, PersistentVolumeClaimKind } from '@console/internal/module/k8s';
import {
LoadingInline,
ResourceIcon,
Expand Down Expand Up @@ -32,18 +32,7 @@ import { PrometheusEndpoint } from '@console/internal/components/graphs/helpers'
import { getInstantVectorStats } from '@console/internal/components/graphs/utils';
import { usePrometheusPoll } from '@console/internal/components/graphs/prometheus-poll-hook';
import { getRequestedPVCSize } from '@console/shared/src/selectors';

const accessModeLabels = Object.freeze({
ReadWriteOnce: 'Single User (RWO)',
ReadWriteMany: 'Shared Access (RWX)',
ReadOnlyMany: 'Read Only (ROX)',
});

const dropdownUnits = {
Mi: 'MiB',
Gi: 'GiB',
Ti: 'TiB',
};
import { dropdownUnits, accessModeRadios } from '@console/internal/components/storage/shared';

const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
const { close, cancel, resource, handlePromise, errorMessage, inProgress } = props;
Expand All @@ -54,6 +43,9 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
const [clonePVCName, setClonePVCName] = React.useState(`${pvcName}-clone`);
const [requestedSize, setRequestedSize] = React.useState(defaultSize[0] || '');
const [requestedUnit, setRequestedUnit] = React.useState(defaultSize[1] || 'Gi');
const accessMode = accessModeRadios.find(
(mode) => mode.value === resource?.spec?.accessModes?.[0],
);

const pvcUsedCapacityQuery: string = `kubelet_volume_stats_used_bytes{persistentvolumeclaim='${pvcName}'}`;
const [response, error, loading] = usePrometheusPoll({
Expand All @@ -75,7 +67,7 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
const submit = (event: React.FormEvent<EventTarget>) => {
event.preventDefault();

const pvcCloneObj = {
const pvcCloneObj: PersistentVolumeClaimKind = {
apiVersion: PersistentVolumeClaimModel.apiVersion,
kind: PersistentVolumeClaimModel.kind,
metadata: {
Expand All @@ -95,6 +87,7 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
},
},
accessModes: resource.spec.accessModes,
volumeMode: resource.spec.volumeMode,
},
};

Expand Down Expand Up @@ -164,7 +157,7 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
<div>
<div>
<p className="co-clone-pvc-modal__pvc-details">Access Mode</p>
<p>{accessModeLabels[resource.spec.accessModes]}</p>
<p>{accessMode.title || '-'}</p>
</div>
<div>
<p className="co-clone-pvc-modal__pvc-details">Volume Mode</p>
Expand All @@ -186,7 +179,7 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
});

export type ClonePVCModalProps = {
resource?: K8sResourceKind;
resource?: PersistentVolumeClaimKind;
} & HandlePromiseProps &
ModalComponentProps;

Expand Down
6 changes: 6 additions & 0 deletions frontend/public/components/utils/kebab.tsx
Expand Up @@ -334,13 +334,17 @@ const kebabFactory: KebabFactory = {
}),
PVCSnapshot: (kind, obj) => ({
label: 'Create Snapshot',
isDisabled: obj?.status?.phase !== 'Bound',
tooltip: obj?.status?.phase !== 'Bound' ? 'PVC is not bound' : '',
href: `${resourceObjPath(obj, kind.crd ? referenceForModel(kind) : kind.kind)}/${
VolumeSnapshotModel.plural
}/~new/form`,
accessReview: asAccessReview(kind, obj, 'create'),
}),
ClonePVC: (kind, obj) => ({
label: 'Clone PVC',
isDisabled: obj?.status?.phase !== 'Bound',
tooltip: obj?.status?.phase !== 'Bound' ? 'PVC is not bound' : '',
callback: () =>
clonePVCModal({
kind,
Expand All @@ -350,6 +354,8 @@ const kebabFactory: KebabFactory = {
}),
RestorePVC: (kind, obj) => ({
label: 'Restore as new PVC',
isDisabled: obj?.status?.phase !== 'Ready',
tooltip: obj?.status?.phase !== 'Ready' ? 'Snapshot is not Ready' : '',
callback: () =>
restorePVCModal({
kind,
Expand Down

0 comments on commit a8ea197

Please sign in to comment.