Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OCPBUGS-25881: remove "openshift-storage" namespace usage from the console #13418

Merged
merged 1 commit into from Jan 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
16 changes: 5 additions & 11 deletions 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 = [
Expand All @@ -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));
4 changes: 2 additions & 2 deletions frontend/public/components/storage/create-pvc.tsx
Expand Up @@ -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) => (
<AsyncComponent
Expand Down Expand Up @@ -116,7 +116,7 @@ export const CreatePVCForm: React.FC<CreatePVCFormProps> = (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);
Expand Down
34 changes: 24 additions & 10 deletions frontend/public/components/storage/shared.ts
Expand Up @@ -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'],
Expand Down Expand Up @@ -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': {
SanjalKatiyar marked this conversation as resolved.
Show resolved Hide resolved
'rbd.csi.ceph.com': {
Filesystem: ['ReadWriteOnce', 'ReadOnlyMany'],
Block: ['ReadWriteOnce', 'ReadWriteMany', 'ReadOnlyMany'],
partialMatch: true,
},
};
});

export const getAccessModeRadios = () => [
{
Expand Down Expand Up @@ -141,17 +145,27 @@ 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,
ignoreReadOnly?: boolean,
volumeMode?: string,
): AccessMode[] => {
let accessModes: AccessMode[];
const modeMapping: ModeMapping = getProvisionerAccessModeMapping(provisioner);
const modeMapping: ModeMapping = getProvisionerModeMapping(provisioner);

if (!_.isEmpty(modeMapping)) {
accessModes = volumeMode
Expand All @@ -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
Expand Down