Skip to content

Commit

Permalink
added new wizard tab
Browse files Browse the repository at this point in the history
  • Loading branch information
Gilad Lekner authored and glekner committed Nov 20, 2019
1 parent d411559 commit 0495163
Show file tree
Hide file tree
Showing 18 changed files with 596 additions and 114 deletions.
Expand Up @@ -65,6 +65,7 @@ import { ReviewTab } from './tabs/review-tab/review-tab';
import { ResultTab } from './tabs/result-tab/result-tab';
import { StorageTab } from './tabs/storage-tab/storage-tab';
import { CloudInitTab } from './tabs/cloud-init-tab/cloud-init-tab';
import { VirtualHardwareTab } from './tabs/virtual-hardware-tab/virtual-hardware-tab';

import './create-vm-wizard.scss';

Expand Down Expand Up @@ -345,6 +346,15 @@ export class CreateVMWizardComponent extends React.Component<CreateVMWizardCompo
</>
),
},
{
id: VMWizardTab.ADVANCED_VIRTUAL_HARDWARE,
component: (
<>
<ResourceLoadErrors wizardReduxID={reduxID} />
<VirtualHardwareTab wizardReduxID={reduxID} />
</>
),
},
],
},
{
Expand Down
Expand Up @@ -11,6 +11,7 @@ const initialStateGetterResolver = {
[VMWizardTab.NETWORKING]: getNetworksInitialState,
[VMWizardTab.STORAGE]: getStorageInitialState,
[VMWizardTab.ADVANCED_CLOUD_INIT]: getCloudInitInitialState,
[VMWizardTab.ADVANCED_VIRTUAL_HARDWARE]: getStorageInitialState,
[VMWizardTab.REVIEW]: getReviewInitialState,
[VMWizardTab.RESULT]: getResultInitialState,
};
Expand Down
@@ -1,3 +1,4 @@
export const ADD_DISK = 'Add Disk';
export const ATTACH_CD = 'Attach CD-ROM';
export const NO_BOOTABLE_ATTACHED_DISK_ERROR = 'A bootable attached disk could not be found';
export const SELECT_BOOTABLE_DISK = '--- Select Bootable Disk ---';
Expand Up @@ -15,6 +15,7 @@ export const TabTitleResolver = {
[VMWizardTab.NETWORKING]: 'Networking',
[VMWizardTab.STORAGE]: 'Storage',
[VMWizardTab.ADVANCED_CLOUD_INIT]: 'Cloud-init',
[VMWizardTab.ADVANCED_VIRTUAL_HARDWARE]: 'Virtual Hardware',
[VMWizardTab.REVIEW]: 'Review',
[VMWizardTab.RESULT]: 'Result',
};
@@ -1,4 +1,5 @@
import * as React from 'react';
import * as _ from 'lodash';
import { connect } from 'react-redux';
import {
Bullseye,
Expand Down Expand Up @@ -29,9 +30,9 @@ import { ProvisionSource } from '../../../../constants/vm/provision-source';
import { CombinedDisk } from '../../../../k8s/wrapper/vm/combined-disk';
import { isLoaded } from '../../../../utils';
import { ADD_DISK } from '../../strings/storage';
import { DeviceType, DiskType } from '../../../../constants/vm';
import { getAvailableCDName } from '../../../modals/cdrom-vm-modal/helpers';
import { DeviceType } from '../../../../constants/vm';
import { PersistentVolumeClaimWrapper } from '../../../../k8s/wrapper/vm/persistent-volume-claim-wrapper';
import { VHW_TYPES } from '../virtual-hardware-tab/types';
import { VmWizardStorageRow } from './vm-wizard-storage-row';
import { VMWizardStorageBundle } from './types';
import { vmWizardStorageModalEnhanced } from './vm-wizard-storage-modal-enhanced';
Expand All @@ -45,34 +46,36 @@ const getStoragesData = (
): VMWizardStorageBundle[] => {
const pvcLookup = createLookup(pvcs, getName);

return storages.map((wizardStorageData) => {
const {
diskWrapper,
volumeWrapper,
dataVolumeWrapper,
persistentVolumeClaimWrapper,
} = wizardStorageData;
const pvc = pvcLookup[volumeWrapper.getPersistentVolumeClaimName()];

const combinedDisk = new CombinedDisk({
diskWrapper,
volumeWrapper,
dataVolumeWrapper,
persistentVolumeClaimWrapper:
persistentVolumeClaimWrapper || (pvc && PersistentVolumeClaimWrapper.initialize(pvc)),
pvcsLoading: !isLoaded(pvcs),
return storages
.filter((storage) => !_.includes(VHW_TYPES, storage.diskWrapper.getType()))
.map((wizardStorageData) => {
const {
diskWrapper,
volumeWrapper,
dataVolumeWrapper,
persistentVolumeClaimWrapper,
} = wizardStorageData;
const pvc = pvcLookup[volumeWrapper.getPersistentVolumeClaimName()];

const combinedDisk = new CombinedDisk({
diskWrapper,
volumeWrapper,
dataVolumeWrapper,
persistentVolumeClaimWrapper:
persistentVolumeClaimWrapper || (pvc && PersistentVolumeClaimWrapper.initialize(pvc)),
pvcsLoading: !isLoaded(pvcs),
});

return {
wizardStorageData,
// for sorting
name: combinedDisk.getName(),
type: combinedDisk.getTypeValue(),
diskInterface: combinedDisk.getDiskInterface(),
size: combinedDisk.getReadableSize(),
storageClass: combinedDisk.getStorageClassName(),
};
});

return {
wizardStorageData,
// for sorting
name: combinedDisk.getName(),
type: combinedDisk.getTypeValue(),
diskInterface: combinedDisk.getDiskInterface(),
size: combinedDisk.getReadableSize(),
storageClass: combinedDisk.getStorageClassName(),
};
});
};

const StorageTabFirehose: React.FC<StorageTabFirehoseProps> = ({
Expand All @@ -87,10 +90,6 @@ const StorageTabFirehose: React.FC<StorageTabFirehoseProps> = ({
}) => {
const showStorages = storages.length > 0 || isBootDiskRequired;

const disableAddCD =
storages.filter((storage) => storage.diskWrapper.getType() === DiskType.CDROM).length > 1;
const availableCDName = getAvailableCDName(storages.map((storage) => storage.disk));

const withProgress = wrapWithProgress(setTabLocked);

const addButtonProps = {
Expand All @@ -100,8 +99,6 @@ const StorageTabFirehose: React.FC<StorageTabFirehoseProps> = ({
vmWizardStorageModalEnhanced({
blocking: true,
wizardReduxID,
disableAddCD,
availableCDName,
}).result,
),
isDisabled: isLocked,
Expand Down
Expand Up @@ -3,6 +3,7 @@ import { StorageSimpleData } from '../../../vm-disks/types';

export type VMWizardStorageBundle = StorageSimpleData & {
wizardStorageData: VMWizardStorageWithWrappers;
isCD?: boolean;
};

export type VMWizardStorageRowActionOpts = {
Expand Down
Expand Up @@ -24,12 +24,13 @@ import { DataVolumeWrapper } from '../../../../k8s/wrapper/vm/data-volume-wrappe
import { DiskModal } from '../../../modals/disk-modal';
import { VM_TEMPLATE_NAME_PARAMETER } from '../../../../constants/vm-templates';
import { PersistentVolumeClaimWrapper } from '../../../../k8s/wrapper/vm/persistent-volume-claim-wrapper';
import { DiskType } from '../../../../constants';

const VMWizardNICModal: React.FC<VMWizardStorageModalProps> = (props) => {
const {
initialType,
storage,
availableCDName,
disableAddCD,
namespace: vmNamespace,
useProjects,
addUpdateStorage,
Expand Down Expand Up @@ -84,6 +85,7 @@ const VMWizardNICModal: React.FC<VMWizardStorageModalProps> = (props) => {
<Firehose resources={resources}>
<DiskModal
{...restProps}
initialType={initialType}
vmName={VM_TEMPLATE_NAME_PARAMETER}
vmNamespace={vmNamespace}
namespace={namespace}
Expand All @@ -92,7 +94,6 @@ const VMWizardNICModal: React.FC<VMWizardStorageModalProps> = (props) => {
usedPVCNames={usedPVCNames}
disk={diskWrapper}
availableCDName={availableCDName}
disableAddCD={disableAddCD}
volume={volumeWrapper}
dataVolume={dataVolumeWrapper}
persistentVolumeClaim={persistentVolumeClaimWrapper}
Expand Down Expand Up @@ -132,11 +133,11 @@ const VMWizardNICModal: React.FC<VMWizardStorageModalProps> = (props) => {
};

type VMWizardStorageModalProps = ModalComponentProps & {
initialType?: DiskType;
storage?: VMWizardStorageWithWrappers;
availableCDName?: string;
namespace: string;
useProjects?: boolean;
disableAddCD?: boolean;
storages: VMWizardStorageWithWrappers[];
addUpdateStorage: (storage: VMWizardStorage) => void;
};
Expand Down
Expand Up @@ -3,6 +3,7 @@ import * as _ from 'lodash';
import { Kebab, KebabOption } from '@console/internal/components/utils';
import { VMWizardStorageType, VMWizardStorageWithWrappers } from '../../types';
import { DiskSimpleRow } from '../../../vm-disks/disk-row';
import { CDSimpleRow } from '../../../vm-disks/cd-row';
import {
VMWizardStorageBundle,
VMWizardStorageRowActionOpts,
Expand Down Expand Up @@ -65,13 +66,13 @@ export type VMWizardNicRowProps = {
};

export const VmWizardStorageRow: React.FC<VMWizardNicRowProps> = ({
obj: { name, wizardStorageData, ...restData },
obj: { name, wizardStorageData, isCD, ...restData },
customData: { isDisabled, columnClasses, removeStorage, withProgress, wizardReduxID },
index,
style,
}) => {
const validations = _.get(wizardStorageData, ['validation', 'validations'], {});
return (
return !isCD ? (
<DiskSimpleRow
data={{ ...restData, name }}
validation={{
Expand All @@ -89,5 +90,23 @@ export const VmWizardStorageRow: React.FC<VMWizardNicRowProps> = ({
/>
}
/>
) : (
<CDSimpleRow
data={{ ...restData, name }}
validation={{
name: validations.name || validations.url || validations.container || validations.pvc,
size: validations.size,
}}
columnClasses={columnClasses}
index={index}
style={style}
actionsComponent={
<Kebab
options={getActions(wizardStorageData, { wizardReduxID, removeStorage, withProgress })}
isDisabled={isDisabled}
id={`kebab-for-${name}`}
/>
}
/>
);
};
@@ -0,0 +1,3 @@
import { DiskType } from '../../../../constants';

export const VHW_TYPES = [DiskType.CDROM];
@@ -0,0 +1,19 @@
.kubevirt-create-vm-modal__virtual-hardware-tab-container {
display: flex;
flex-direction: column;
min-height: 100%;

.kubevirt-create-vm-modal__virtual-hardware-tab-cd-title {
margin-top: var(--pf-global--gutter);
}
}

.kubevirt-create-vm-modal__virtual-hardware-tab-main {
flex: 1;
}

.kubevirt-create-vm-modal__virtual-hardware-tab-boot-select {
margin-top: 1rem;
margin-bottom: 3rem;
}

0 comments on commit 0495163

Please sign in to comment.