Skip to content

Commit

Permalink
enhance ObjectWithTypePropertyWrapper and simplify wrappers
Browse files Browse the repository at this point in the history
- deprecate defaultMergeWrappersWithType as all entities should use mergeWith
- simplify initializeFromSimpleData
- enhance ObjectWithTypePropertyWrapper and move setters and sanitize functionality there
- each wrapper implements its own sanitize function
- smiplify constructors and deprecate initializeWithType
- constructor can copy wrapper
  • Loading branch information
suomiy committed Mar 2, 2020
1 parent e1ca1af commit 3db7052
Show file tree
Hide file tree
Showing 21 changed files with 314 additions and 414 deletions.
Expand Up @@ -189,7 +189,7 @@ export const prefillVmTemplateUpdater = ({ id, dispatch, getState }: UpdateOptio
if (helper.includesOnlyFormValues()) {
isCloudInitForm = true;
helper.makeFormCompliant();
volumeWrapper.setTypeData(helper.asCloudInitNoCloudSource(), false);
volumeWrapper.setTypeData(helper.asCloudInitNoCloudSource());
// do not overwrite with more cloud-init disks
} else if (isCloudInitForm == null) {
isCloudInitForm = false;
Expand Down Expand Up @@ -222,7 +222,7 @@ export const prefillVmTemplateUpdater = ({ id, dispatch, getState }: UpdateOptio
}

if (diskWrapper.getType() === DiskType.DISK && !diskWrapper.getDiskBus()) {
diskWrapper.appendTypeData({ bus: DiskBus.VIRTIO });
diskWrapper.appendTypeData({ bus: DiskBus.VIRTIO.getValue() });
}

return {
Expand Down
Expand Up @@ -205,7 +205,7 @@ const CloudInitTabComponent: React.FC<ResultTabComponentProps> = ({
type: iCloudInitStorage && iCloudInitStorage.get('type'),
disk: toShallowJS(iCloudInitStorage.get('disk')),
volume: new VolumeWrapper(toJS(iCloudInitStorage.get('volume')))
.setTypeData(typeData, false)
.setTypeData(typeData)
.asResource(),
});
}
Expand Down
Expand Up @@ -27,29 +27,29 @@ const VMWizardNICModal: React.FC<VMWizardNICModalProps> = (props) => {
hasNADs,
addUpdateNIC,
networks,
networkInterfaceWrapper = NetworkInterfaceWrapper.EMPTY,
networkWrapper = NetworkWrapper.EMPTY,
networkInterfaceWrapper,
networkWrapper,
...restProps
} = props;

const usedInterfacesNames: Set<string> = new Set(
networks
.map(({ networkInterfaceWrapper: nicWrapper }) => nicWrapper.getName())
.filter((n) => n && n !== networkInterfaceWrapper.getName()),
.filter((n) => n && n !== networkInterfaceWrapper?.getName()),
);

const usedMultusNetworkNames: Set<string> = new Set(
networks
.filter(
({ networkWrapper: usedNetworkWrapper }) =>
usedNetworkWrapper.getType() === NetworkType.MULTUS &&
usedNetworkWrapper.getMultusNetworkName() !== networkWrapper.getMultusNetworkName(),
usedNetworkWrapper.getMultusNetworkName() !== networkWrapper?.getMultusNetworkName(),
)
.map(({ networkWrapper: usedNetworkWrapper }) => usedNetworkWrapper.getMultusNetworkName()),
);

const allowPodNetwork =
networkWrapper.isPodNetwork() ||
networkWrapper?.isPodNetwork() ||
!networks.find(({ networkWrapper: usedNetworkWrapper }) => usedNetworkWrapper.isPodNetwork());

const modal = (
Expand All @@ -58,17 +58,18 @@ const VMWizardNICModal: React.FC<VMWizardNICModalProps> = (props) => {
usedInterfacesNames={usedInterfacesNames}
usedMultusNetworkNames={usedMultusNetworkNames}
allowPodNetwork={allowPodNetwork}
nic={new NetworkInterfaceWrapper(networkInterfaceWrapper.asResource(), true)}
network={new NetworkWrapper(networkWrapper.asResource(), true)}
nic={new NetworkInterfaceWrapper(networkInterfaceWrapper, true)}
network={new NetworkWrapper(networkWrapper, true)}
onSubmit={(resultNetworkInterfaceWrapper, resultNetworkWrapper) => {
addUpdateNIC({
id,
type: type || VMWizardNetworkType.UI_INPUT,
networkInterface: NetworkInterfaceWrapper.mergeWrappers(
networkInterfaceWrapper,
resultNetworkInterfaceWrapper,
).asResource(),
network: NetworkWrapper.mergeWrappers(networkWrapper, resultNetworkWrapper).asResource(),
networkInterface: new NetworkInterfaceWrapper(networkInterfaceWrapper, true)
.mergeWith(resultNetworkInterfaceWrapper)
.asResource(),
network: new NetworkWrapper(networkWrapper, true)
.mergeWith(resultNetworkWrapper)
.asResource(),
});
return Promise.resolve();
}}
Expand Down
Expand Up @@ -94,12 +94,12 @@ const VMWizardStorageModal: React.FC<VMWizardStorageModalProps> = (props) => {
usedDiskNames={usedDiskNames}
usedPVCNames={usedPVCNames}
templateValidations={templateValidations}
disk={new DiskWrapper(diskWrapper?.asResource(true))}
volume={new VolumeWrapper(volumeWrapper?.asResource(true))}
dataVolume={dataVolumeWrapper && new DataVolumeWrapper(dataVolumeWrapper.asResource(true))}
disk={new DiskWrapper(diskWrapper, true)}
volume={new VolumeWrapper(volumeWrapper, true)}
dataVolume={dataVolumeWrapper && new DataVolumeWrapper(dataVolumeWrapper, true)}
persistentVolumeClaim={
persistentVolumeClaimWrapper &&
new PersistentVolumeClaimWrapper(persistentVolumeClaimWrapper.asResource(true))
new PersistentVolumeClaimWrapper(persistentVolumeClaimWrapper, true)
}
disableSourceChange={[
VMWizardStorageType.PROVISION_SOURCE_DISK,
Expand All @@ -116,18 +116,19 @@ const VMWizardStorageModal: React.FC<VMWizardStorageModalProps> = (props) => {
addUpdateStorage({
...storageRest,
type: type || VMWizardStorageType.UI_INPUT,
disk: DiskWrapper.mergeWrappers(diskWrapper, resultDiskWrapper).asResource(),
volume: VolumeWrapper.mergeWrappers(volumeWrapper, resultVolumeWrapper).asResource(),
disk: new DiskWrapper(diskWrapper, true).mergeWith(resultDiskWrapper).asResource(),
volume: new VolumeWrapper(volumeWrapper, true)
.mergeWith(resultVolumeWrapper)
.asResource(),
dataVolume:
resultDataVolumeWrapper &&
DataVolumeWrapper.mergeWrappers(
dataVolumeWrapper,
resultDataVolumeWrapper,
).asResource(),
new DataVolumeWrapper(dataVolumeWrapper, true)
.mergeWith(resultDataVolumeWrapper)
.asResource(),
persistentVolumeClaim:
resultPersistentVolumeClaim &&
new PersistentVolumeClaimWrapper()
.mergeWith(persistentVolumeClaimWrapper, resultPersistentVolumeClaim)
new PersistentVolumeClaimWrapper(persistentVolumeClaimWrapper, true)
.mergeWith(resultPersistentVolumeClaim)
.asResource(),
});
return Promise.resolve();
Expand Down
Expand Up @@ -40,11 +40,11 @@ const DiskModalFirehoseComponent: React.FC<DiskModalFirehoseComponentProps> = (p
getVMLikeModel(vmLikeEntity),
vmLikeEntity,
await getUpdateDiskPatches(vmLikeEntity, {
disk: DiskWrapper.mergeWrappers(diskWrapper, resultDisk).asResource(),
volume: new VolumeWrapper(volume, true).mergeWith(resultVolume).asResource(),
disk: new DiskWrapper(diskWrapper, true).mergeWith(resultDisk).asResource(),
volume: new VolumeWrapper(volumeWrapper, true).mergeWith(resultVolume).asResource(),
dataVolume:
resultDataVolume &&
DataVolumeWrapper.mergeWrappers(dataVolumeWrapper, resultDataVolume).asResource(),
new DataVolumeWrapper(dataVolume, true).mergeWith(resultDataVolume).asResource(),
oldDiskName: diskWrapper.getName(),
oldVolumeName: volumeWrapper.getName(),
oldDataVolumeName: dataVolumeWrapper.getName(),
Expand All @@ -58,9 +58,9 @@ const DiskModalFirehoseComponent: React.FC<DiskModalFirehoseComponentProps> = (p
usedPVCNames={combinedDiskFactory.getUsedDataVolumeNames(dataVolumeWrapper.getName())}
vmName={getName(vm)}
vmNamespace={getNamespace(vm)}
disk={new DiskWrapper(disk, true)}
volume={new VolumeWrapper(volume, true)}
dataVolume={new DataVolumeWrapper(dataVolume, true)}
disk={new DiskWrapper(diskWrapper, true)}
volume={new VolumeWrapper(volumeWrapper, true)}
dataVolume={new DataVolumeWrapper(dataVolumeWrapper, true)}
onSubmit={onSubmit}
/>
);
Expand Down
Expand Up @@ -80,9 +80,9 @@ export const DiskModal = withHandlePromise((props: DiskModalProps) => {
templateValidations,
} = props;
const asId = prefixedID.bind(null, 'disk');
const disk = props.disk || DiskWrapper.EMPTY;
const volume = props.volume || VolumeWrapper.EMPTY;
const dataVolume = props.dataVolume || DataVolumeWrapper.EMPTY;
const disk = props.disk || new DiskWrapper();
const volume = props.volume || new VolumeWrapper();
const dataVolume = props.dataVolume || new DataVolumeWrapper();
const tValidations = templateValidations || new TemplateValidations();
const validAllowedBuses = tValidations.getAllowedBuses();
const recommendedBuses = tValidations.getRecommendedBuses();
Expand All @@ -102,7 +102,7 @@ export const DiskModal = withHandlePromise((props: DiskModalProps) => {
combinedDisk.getInitialSource(isEditing),
);

const [url, setURL] = React.useState<string>(dataVolume.getURL);
const [url, setURL] = React.useState<string>(dataVolume.getURL());

const [containerImage, setContainerImage] = React.useState<string>(
volume.getContainerImage() || '',
Expand Down Expand Up @@ -142,33 +142,27 @@ export const DiskModal = withHandlePromise((props: DiskModalProps) => {
let resultVolume;
if (source.requiresVolume()) {
// update just Disk for unknown sources
resultVolume = VolumeWrapper.initializeFromSimpleData(
{
name,
type: source.getVolumeType(),
typeData: {
name: resultDataVolumeName,
claimName: pvcName,
image: containerImage,
},
resultVolume = VolumeWrapper.initializeFromSimpleData({
name,
type: source.getVolumeType(),
typeData: {
name: resultDataVolumeName,
claimName: pvcName,
image: containerImage,
},
{ sanitizeTypeData: true },
);
});
}

let resultDataVolume;
if (source.requiresDatavolume()) {
resultDataVolume = DataVolumeWrapper.initializeFromSimpleData(
{
name: resultDataVolumeName,
storageClassName,
type: source.getDataVolumeSourceType(),
size,
unit,
typeData: { name: pvcName, namespace, url },
},
{ sanitizeTypeData: true },
);
resultDataVolume = DataVolumeWrapper.initializeFromSimpleData({
name: resultDataVolumeName,
storageClassName,
type: source.getDataVolumeSourceType(),
size,
unit,
typeData: { name: pvcName, namespace, url },
});
}

let resultPersistentVolumeClaim;
Expand Down
Expand Up @@ -21,8 +21,8 @@ const NICModalFirehoseComponent: React.FC<NICModalFirehoseComponentProps> = (pro
const vmLikeFinal = getLoadedData(vmLikeEntityLoading, vmLikeEntity); // default old snapshot before loading a new one
const vm = asVM(vmLikeFinal);

const nicWrapper = nic ? new NetworkInterfaceWrapper(nic, true) : NetworkInterfaceWrapper.EMPTY;
const networkWrapper = network ? new NetworkWrapper(network, true) : NetworkWrapper.EMPTY;
const nicWrapper = new NetworkInterfaceWrapper(nic);
const networkWrapper = new NetworkWrapper(network);

const usedNetworksChoices = getUsedNetworks(vm);

Expand Down Expand Up @@ -51,11 +51,12 @@ const NICModalFirehoseComponent: React.FC<NICModalFirehoseComponentProps> = (pro
getVMLikeModel(vmLikeEntity),
vmLikeEntity,
getUpdateNICPatches(vmLikeEntity, {
nic: NetworkInterfaceWrapper.mergeWrappers(
nicWrapper,
resultNetworkInterfaceWrapper,
).asResource(),
network: NetworkWrapper.mergeWrappers(networkWrapper, resultNetworkWrapper).asResource(),
nic: new NetworkInterfaceWrapper(nicWrapper, true)
.mergeWith(resultNetworkInterfaceWrapper)
.asResource(),
network: new NetworkWrapper(networkWrapper, true)
.mergeWith(resultNetworkWrapper)
.asResource(),
oldNICName: nicWrapper.getName(),
oldNetworkName: networkWrapper.getName(),
}),
Expand All @@ -67,8 +68,8 @@ const NICModalFirehoseComponent: React.FC<NICModalFirehoseComponentProps> = (pro
usedInterfacesNames={usedInterfacesNames}
usedMultusNetworkNames={usedMultusNetworkNames}
allowPodNetwork={allowPodNetwork}
nic={nicWrapper}
network={networkWrapper}
nic={new NetworkInterfaceWrapper(nicWrapper, true)}
network={new NetworkWrapper(networkWrapper, true)}
onSubmit={onSubmit}
/>
);
Expand Down
Expand Up @@ -123,9 +123,9 @@ export const NICModal = withHandlePromise((props: NICModalProps) => {
cancel,
} = props;
const asId = prefixedID.bind(null, 'nic');
const nic = props.nic || NetworkInterfaceWrapper.EMPTY;
const network = props.network || NetworkWrapper.EMPTY;
const isEditing = nic !== NetworkInterfaceWrapper.EMPTY;
const nic = props.nic || new NetworkInterfaceWrapper();
const network = props.network || new NetworkWrapper();
const isEditing = !!props.nic;

const [name, setName] = React.useState<string>(
nic.getName() || getSequenceName('nic', usedInterfacesNames),
Expand Down
Expand Up @@ -8,8 +8,10 @@ import { ObjectEnum } from '../../../constants';
export class K8sResourceObjectWithTypePropertyWrapper<
RESOURCE extends K8sResourceKind,
TYPE extends ObjectEnum<string>,
SELF extends K8sResourceObjectWithTypePropertyWrapper<RESOURCE, TYPE, SELF>
> extends ObjectWithTypePropertyWrapper<RESOURCE, TYPE, SELF> implements K8sResourceKindMethods {
COMBINED_TYPE_DATA,
SELF extends K8sResourceObjectWithTypePropertyWrapper<RESOURCE, TYPE, COMBINED_TYPE_DATA, SELF>
> extends ObjectWithTypePropertyWrapper<RESOURCE, TYPE, COMBINED_TYPE_DATA, SELF>
implements K8sResourceKindMethods {
getName = () => getName(this.data);
getLabels = (defaultValue = {}) => getLabels(this.data, defaultValue);
hasLabel = (label: string) => hasLabel(this.data, label);
Expand Down

0 comments on commit 3db7052

Please sign in to comment.