Skip to content

Commit

Permalink
Cross storage class clone /restore
Browse files Browse the repository at this point in the history
Signed-off-by: Timothy Asir Jeyasingh <tjeyasin@redhat.com>
  • Loading branch information
TimothyAsirJeyasing committed Jan 31, 2024
1 parent a3b2364 commit 1024522
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
Expand Up @@ -34,6 +34,7 @@ import {
} from '@console/internal/components/utils';
import { useK8sGet } from '@console/internal/components/utils/k8s-get-hook';
import { HandlePromiseProps } from '@console/internal/components/utils/promise-component';
import { StorageClassDropdown } from '@console/internal/components/utils/storage-class-dropdown';
import {
NamespaceModel,
PersistentVolumeClaimModel,
Expand All @@ -46,13 +47,14 @@ import {
StorageClassResourceKind,
} from '@console/internal/module/k8s';
import { RedExclamationCircleIcon, isCephProvisioner } from '@console/shared';
import { getRequestedPVCSize } from '@console/shared/src/selectors';
import { getName, getRequestedPVCSize } from '@console/shared/src/selectors';
import { getPVCAccessModes, AccessModeSelector } from '../../access-modes/access-mode';

import './_clone-pvc-modal.scss';

const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
const { t } = useTranslation();
const [storageClassName, setStorageClassName] = React.useState('');
const { close, cancel, resource, handlePromise, errorMessage, inProgress } = props;
const { name: pvcName, namespace } = resource?.metadata;
const baseValue = convertToBaseValue(getRequestedPVCSize(resource));
Expand All @@ -65,12 +67,19 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
const [requestedUnit, setRequestedUnit] = React.useState(defaultSize[1] || 'Ti');
const [validSize, setValidSize] = React.useState(true);
const pvcAccessMode = getPVCAccessModes(resource, 'title');
const handleStorageClass = (storageClass) => {
setStorageClassName(getName(storageClass));
};

const [scResource, scResourceLoaded, scResourceLoadError] = useK8sGet<StorageClassResourceKind>(
StorageClassModel,
resource?.spec?.storageClassName,
);

const onlyPvcSCs = (scObj: StorageClassResourceKind) =>
!scResourceLoadError &&
scObj.provisioner.includes(scResource?.provisioner) &&
scObj?.resource?.parameters?.encrypted === scResource?.parameters?.encrypted;
const pvcUsedCapacityQuery: string = `kubelet_volume_stats_used_bytes{persistentvolumeclaim='${pvcName}'}`;
const [response, error, loading] = usePrometheusPoll({
endpoint: PrometheusEndpoint.QUERY,
Expand Down Expand Up @@ -103,7 +112,8 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
namespace: resource.metadata.namespace,
},
spec: {
storageClassName: resource.spec.storageClassName,
// eslint-disable-next-line object-shorthand
storageClassName: storageClassName || resource.spec?.storageClassName,
dataSource: {
name: pvcName,
kind: PersistentVolumeClaimModel.kind,
Expand Down Expand Up @@ -186,6 +196,12 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
</FormHelperText>
)}
</FormGroup>
<StorageClassDropdown
onChange={handleStorageClass}
filter={onlyPvcSCs}
id="clone-storage-class"
required
/>
<div className="co-clone-pvc-modal__details">
<p className="text-muted">{t('console-app~PVC details')}</p>
<div className="co-clone-pvc-modal__details-section">
Expand All @@ -201,7 +217,7 @@ const ClonePVCModal = withHandlePromise((props: ClonePVCModalProps) => {
<p className="co-clone-pvc-modal__pvc-details">{t('console-app~StorageClass')}</p>
<p>
<ResourceIcon kind={StorageClassModel.kind} />
{resource.spec?.storageClassName || '-'}
{storageClassName || '-'}
</p>
</div>
</div>
Expand Down
5 changes: 5 additions & 0 deletions frontend/public/module/k8s/types.ts
Expand Up @@ -470,6 +470,11 @@ export type StorageClassResourceKind = {
parameters?: {
[key: string]: string;
};
resource?: {
parameters?: {
encrypted: string;
};
};
} & K8sResourceCommon;

export type ConfigMapKind = {
Expand Down

0 comments on commit 1024522

Please sign in to comment.