Skip to content

Commit

Permalink
Bug 1914941: VM Template rootdisk is not deleted after fetching defau…
Browse files Browse the repository at this point in the history
…lt disk bus
  • Loading branch information
glekner committed Jan 11, 2021
1 parent 106e037 commit 4fcb73d
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 21 deletions.
Expand Up @@ -42,10 +42,7 @@ import {
iGetCommonData,
getInitialData,
} from '../../selectors/immutable/selectors';
import {
iGetCommonTemplateDiskBus,
iGetRelevantTemplate,
} from '../../../../selectors/immutable/template/combined';
import { iGetRelevantTemplate } from '../../../../selectors/immutable/template/combined';
import { iGetPrameterValue } from '../../../../selectors/immutable/common';
import { getStorages } from '../../selectors/selectors';

Expand Down Expand Up @@ -240,14 +237,12 @@ export const getNewProvisionSourceStorage = (state: any, id: string): VMWizardSt
const iUserTemplate = iGetCommonData(state, id, VMWizardProps.userTemplate);
const iCommonTemplates = iGetLoadedCommonData(state, id, VMWizardProps.commonTemplates);
const iTemplate = iCommonTemplates && iGetRelevantTemplate(iCommonTemplates, relevantOptions);
// eslint-disable-next-line no-template-curly-in-string
const tmpDiskBus = DiskBus.fromString(iGetCommonTemplateDiskBus(iTemplate, '${NAME}'));

const initialData = getInitialData(state, id);
const { source } = initialData;
const storagesUpdate = getStorages(state, id);
const rootStorage = storagesUpdate.find((s) => s.disk.bootOrder === 1) || storagesUpdate[0];
const diskBus = tmpDiskBus || new DiskWrapper(rootStorage?.disk).getDiskBus();
const diskBus = new DiskWrapper(rootStorage?.disk).getDiskBus();

const storageClassConfigMap = toShallowJS(
iGetLoadedCommonData(state, id, VMWizardProps.storageClassConfigMap),
Expand Down
Expand Up @@ -15,7 +15,6 @@ import { DataVolumeWrapper } from '../../../../k8s/wrapper/vm/data-volume-wrappe
import { PersistentVolumeClaimWrapper } from '../../../../k8s/wrapper/vm/persistent-volume-claim-wrapper';
import { DiskWrapper } from '../../../../k8s/wrapper/vm/disk-wrapper';
import { VolumeWrapper } from '../../../../k8s/wrapper/vm/volume-wrapper';
import { VM_TEMPLATE_NAME_PARAMETER } from '../../../../constants';

export const validateStorages = (options: UpdateOptions) => {
const { id, prevState, dispatch, getState } = options;
Expand Down Expand Up @@ -68,9 +67,7 @@ export const setStoragesTabValidity = (options: UpdateOptions) => {
const { id, dispatch, getState } = options;
const state = getState();

const iStorages = iGetStorages(state, id).filter(
(iStorage) => iGetIn(iStorage, ['disk', 'name']) !== VM_TEMPLATE_NAME_PARAMETER,
);
const iStorages = iGetStorages(state, id);
let errorKey: string;

let hasAllRequiredFilled = iStorages.every((iStorage) =>
Expand Down
Expand Up @@ -22,7 +22,7 @@ import {
hasStepUpdateDisabled,
isStepLocked,
} from '../../selectors/immutable/wizard-selectors';
import { VMWizardProps, VMWizardStorage, VMWizardStorageType, VMWizardTab } from '../../types';
import { VMWizardProps, VMWizardStorage, VMWizardTab } from '../../types';
import { VMDisksTable } from '../../../vm-disks/vm-disks';
import { vmWizardActions } from '../../redux/actions';
import { ActionType } from '../../redux/types';
Expand Down Expand Up @@ -90,15 +90,6 @@ const StorageTabFirehose: React.FC<StorageTabFirehoseProps> = ({
}) => {
const { t } = useTranslation();

React.useEffect(() => {
storages.forEach(({ type, id, disk }) => {
const isTemplateType = type === VMWizardStorageType.TEMPLATE;
// eslint-disable-next-line no-template-curly-in-string
const isMatchedDiskName = disk.name === '${NAME}';
isTemplateType && isMatchedDiskName && removeStorage(id);
});
}, [removeStorage, storages]);

const showStorages = storages.length > 0 || isBootDiskRequired;

const withProgress = wrapWithProgress(setTabLocked);
Expand Down
Expand Up @@ -9,12 +9,16 @@ import { VMWizardStorage } from '../components/create-vm-wizard/types';
import { ActionType } from '../components/create-vm-wizard/redux/types';
import { vmWizardActions } from '../components/create-vm-wizard/redux/actions';
import { PersistentVolumeClaimKind } from '@console/internal/module/k8s';
import { VM_TEMPLATE_NAME_PARAMETER } from '../constants';

export const useUpdateStorages = (reduxID) => {
const dispatch = useDispatch();
const rootDisk = useSelector((state) =>
getStorages(state, reduxID)?.find(({ disk }) => disk?.name === 'rootdisk'),
);
const templateDisk = useSelector((state) =>
getStorages(state, reduxID)?.find(({ disk }) => disk?.name === VM_TEMPLATE_NAME_PARAMETER),
);

const name = rootDisk?.dataVolume?.spec?.source?.pvc?.name;
const namespace = rootDisk?.dataVolume?.spec?.source?.pvc?.namespace;
Expand All @@ -34,10 +38,24 @@ export const useUpdateStorages = (reduxID) => {
[dispatch, reduxID],
);

const removeStorage = React.useCallback(
(storage: VMWizardStorage) => {
dispatch(vmWizardActions[ActionType.RemoveStorage](reduxID, storage.id));
},
[dispatch, reduxID],
);

const [pvc] = useK8sWatchResource<PersistentVolumeClaimKind>(sourcePvc);

if (pvc && rootDisk && rootDisk.dataVolume.spec.pvc.volumeMode !== pvc?.spec?.volumeMode) {
rootDisk.dataVolume.spec.pvc.volumeMode = pvc?.spec?.volumeMode;
updateStorage(rootDisk);
}

if (templateDisk) {
const templateBus = templateDisk?.disk?.disk?.bus;
rootDisk.disk.disk.bus = templateBus;
updateStorage(rootDisk);
removeStorage(templateDisk);
}
};

0 comments on commit 4fcb73d

Please sign in to comment.