From fd10cff85fedfa8aa9fe49c342cde691816eb977 Mon Sep 17 00:00:00 2001 From: SanjalKatiyar Date: Thu, 7 Dec 2023 15:42:31 +0530 Subject: [PATCH] remove openshift-storage namespace usage from the console --- .../console-shared/src/utils/storage-utils.ts | 16 +++------ .../public/components/storage/create-pvc.tsx | 4 +-- frontend/public/components/storage/shared.ts | 34 +++++++++++++------ 3 files changed, 31 insertions(+), 23 deletions(-) diff --git a/frontend/packages/console-shared/src/utils/storage-utils.ts b/frontend/packages/console-shared/src/utils/storage-utils.ts index c3f5a109672..1edbffae756 100644 --- a/frontend/packages/console-shared/src/utils/storage-utils.ts +++ b/frontend/packages/console-shared/src/utils/storage-utils.ts @@ -1,4 +1,3 @@ -import * as _ from 'lodash'; import { StorageClass } from '@console/internal/components/storage-class-form'; export const cephStorageProvisioners = [ @@ -7,16 +6,11 @@ export const cephStorageProvisioners = [ 'rbd.csi.ceph.com', ]; -const objectStorageProvisioners = [ - 'openshift-storage.noobaa.io/obc', - 'openshift-storage.ceph.rook.io/bucket', -]; +const objectStorageProvisioners = ['noobaa.io/obc', 'ceph.rook.io/bucket']; // To check if the provisioner is OCS based -export const isCephProvisioner = (scProvisioner: string): boolean => { - return cephStorageProvisioners.some((provisioner: string) => - _.endsWith(scProvisioner, provisioner), - ); -}; +export const isCephProvisioner = (scProvisioner: string): boolean => + cephStorageProvisioners.some((provisioner: string) => scProvisioner?.includes(provisioner)); -export const isObjectSC = (sc: StorageClass) => objectStorageProvisioners.includes(sc.provisioner); +export const isObjectSC = (sc: StorageClass) => + objectStorageProvisioners.some((provisioner: string) => sc.provisioner?.includes(provisioner)); diff --git a/frontend/public/components/storage/create-pvc.tsx b/frontend/public/components/storage/create-pvc.tsx index 261da3fedca..87091420c3a 100644 --- a/frontend/public/components/storage/create-pvc.tsx +++ b/frontend/public/components/storage/create-pvc.tsx @@ -20,7 +20,7 @@ import { StorageClassDropdown } from '../utils/storage-class-dropdown'; import { Checkbox } from '../checkbox'; import { PersistentVolumeClaimModel } from '../../models'; import { StorageClass } from '../storage-class-form'; -import { provisionerAccessModeMapping, initialAccessModes, dropdownUnits } from './shared'; +import { getProvisionerModeMapping, initialAccessModes, dropdownUnits } from './shared'; const NameValueEditorComponent = (props) => ( = (props) => { const handleStorageClass = (updatedStorageClass) => { const provisioner: string = updatedStorageClass?.provisioner || ''; //setting message to display for various modes when a storage class of a know provisioner is selected - const displayMessage = provisionerAccessModeMapping[provisioner] + const displayMessage = getProvisionerModeMapping(provisioner) ? `${t('public~Access mode is set by StorageClass and cannot be changed')}` : `${t('public~Permissions to the mounted drive')}`; setAccessModeHelp(displayMessage); diff --git a/frontend/public/components/storage/shared.ts b/frontend/public/components/storage/shared.ts index f8209d1b5c9..5de2eca1206 100644 --- a/frontend/public/components/storage/shared.ts +++ b/frontend/public/components/storage/shared.ts @@ -13,16 +13,18 @@ type VolumeMode = 'Filesystem' | 'Block'; export const initialAccessModes: AccessMode[] = ['ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany']; export const initialVolumeModes: VolumeMode[] = ['Filesystem', 'Block']; +type PartialMatch = { partialMatch?: boolean }; type ModeMapping = { [volumeMode in VolumeMode]?: AccessMode[]; }; +type AccessModeMapping = ModeMapping & PartialMatch; type ProvisionerAccessModeMapping = { - [provisioner: string]: ModeMapping; + [provisioner: string]: AccessModeMapping; }; // See https://kubernetes.io/docs/concepts/storage/persistent-volumes/#types-of-persistent-volumes for more details -export const provisionerAccessModeMapping: ProvisionerAccessModeMapping = { +export const provisionerAccessModeMapping: ProvisionerAccessModeMapping = Object.freeze({ 'kubernetes.io/no-provisioner': { Filesystem: ['ReadWriteOnce'], Block: ['ReadWriteOnce'], @@ -100,14 +102,16 @@ export const provisionerAccessModeMapping: ProvisionerAccessModeMapping = { Filesystem: ['ReadWriteOnce'], Block: ['ReadWriteOnce'], }, - 'openshift-storage.cephfs.csi.ceph.com': { + 'cephfs.csi.ceph.com': { Filesystem: ['ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany'], + partialMatch: true, }, - 'openshift-storage.rbd.csi.ceph.com': { + 'rbd.csi.ceph.com': { Filesystem: ['ReadWriteOnce', 'ReadOnlyMany'], Block: ['ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany'], + partialMatch: true, }, -}; +}); export const getAccessModeRadios = () => [ { @@ -141,9 +145,19 @@ export const dropdownUnits = { Ti: 'TiB', }; -const getProvisionerAccessModeMapping = (provisioner: string): ModeMapping => { - return provisionerAccessModeMapping[provisioner] || {}; -}; +export const getProvisionerModeMapping = (provisioner: string): ModeMapping => + _.omit( + _.find(provisionerAccessModeMapping, (value: AccessModeMapping, key: string) => { + if (value?.partialMatch && provisioner?.includes(key)) { + return true; + } + if (key === provisioner) { + return true; + } + return false; + }) || {}, + 'partialMatch', + ); export const getAccessModeForProvisioner = ( provisioner: string, @@ -151,7 +165,7 @@ export const getAccessModeForProvisioner = ( volumeMode?: string, ): AccessMode[] => { let accessModes: AccessMode[]; - const modeMapping: ModeMapping = getProvisionerAccessModeMapping(provisioner); + const modeMapping: ModeMapping = getProvisionerModeMapping(provisioner); if (!_.isEmpty(modeMapping)) { accessModes = volumeMode @@ -174,7 +188,7 @@ export const getVolumeModeForProvisioner = ( provisioner: string, accessMode: string, ): VolumeMode[] => { - const modeMapping: ModeMapping = getProvisionerAccessModeMapping(provisioner); + const modeMapping: ModeMapping = getProvisionerModeMapping(provisioner); if (!_.isEmpty(modeMapping)) { return accessMode