Skip to content

Commit

Permalink
Add mount guest agent tools to vm wizard
Browse files Browse the repository at this point in the history
  • Loading branch information
yaacov committed May 20, 2020
1 parent 9f4bcaa commit 4eda5b6
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ export const getInitialVmSettings = (data: CommonData): VMSettings => {
[VMSettingsField.OPERATING_SYSTEM]: {
isRequired: asRequired(true),
},
[VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS]: {
value: false,
isHidden: asHidden(true),
},
[VMSettingsField.FLAVOR]: {
isRequired: asRequired(true),
value: CUSTOM_FLAVOR,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,34 @@ const osUpdater = ({ id, prevState, dispatch, getState }: UpdateOptions) => {
}
const os = iGetVmSettingValue(state, id, VMSettingsField.OPERATING_SYSTEM);
const isWindows = os && os.startsWith('win');

dispatch(
vmWizardInternalActions[InternalActionType.UpdateVmSettingsField](
id,
VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS,
{ isHidden: !isWindows, value: isWindows },
),
);
};

const windowsToolsUpdater = ({ id, prevState, dispatch, getState }: UpdateOptions) => {
const state = getState();
if (!hasVMSettingsValueChanged(prevState, state, id, VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS)) {
return;
}
const mountWindowsGuestTools = iGetVmSettingValue(
state,
id,
VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS,
);
const windowsTools = getStorages(state, id).find(
(storage) => !!isWinToolsImage(getVolumeContainerImage(storage.volume)),
);

if (isWindows && !windowsTools) {
if (mountWindowsGuestTools && !windowsTools) {
dispatch(vmWizardInternalActions[InternalActionType.UpdateStorage](id, windowsToolsStorage));
}
if (!isWindows && windowsTools) {
if (!mountWindowsGuestTools && windowsTools) {
dispatch(vmWizardInternalActions[InternalActionType.RemoveStorage](id, windowsTools.id));
}
};
Expand Down Expand Up @@ -209,6 +229,7 @@ export const updateVmSettingsState = (options: UpdateOptions) =>
provisioningSourceUpdater,
flavorUpdater,
osUpdater,
windowsToolsUpdater,
workloadConsistencyUpdater,
nativeK8sUpdater,
].forEach((updater) => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export const titleResolver: RenderableFieldResolver = {
[VMSettingsField.CONTAINER_IMAGE]: 'Container Image',
[VMSettingsField.IMAGE_URL]: 'URL',
[VMSettingsField.OPERATING_SYSTEM]: 'Operating System',
[VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS]: 'Mount Windows guest tools',
[VMSettingsField.FLAVOR]: 'Flavor',
[VMSettingsField.MEMORY]: 'Memory',
[VMSettingsField.CPU]: 'CPUs',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as _ from 'lodash';
import * as React from 'react';
import { FormSelect, FormSelectOption } from '@patternfly/react-core';
import { FormSelect, FormSelectOption, Checkbox, Text } from '@patternfly/react-core';
import { ValidationErrorType, asValidationObject } from '@console/shared/src/utils/validation';
import {
concatImmutableLists,
Expand All @@ -20,7 +20,7 @@ import {
import { flavorSort, ignoreCaseSort } from '../../../../utils/sort';
import { VMSettingsField } from '../../types';
import { iGetFieldValue } from '../../selectors/immutable/field';
import { getPlaceholder } from '../../utils/renderable-field-utils';
import { getPlaceholder, getFieldId } from '../../utils/renderable-field-utils';
import { nullOnEmptyChange } from '../../utils/utils';
import { operatingSystemsNative } from '../../../../constants/vm-templates/os';

Expand All @@ -30,6 +30,7 @@ export const OSFlavor: React.FC<OSFlavorProps> = React.memo(
commonTemplates,
userTemplate,
operatinSystemField,
mountWindowsGuestTools: mountWindoesGuestTools,
flavorField,
workloadProfile,
onChange,
Expand Down Expand Up @@ -91,6 +92,8 @@ export const OSFlavor: React.FC<OSFlavorProps> = React.memo(
}
}

const isWindows = os && os.startsWith('win');

return (
<>
<FormFieldRow
Expand All @@ -113,6 +116,23 @@ export const OSFlavor: React.FC<OSFlavorProps> = React.memo(
</FormSelect>
</FormField>
</FormFieldRow>
{isWindows && (
<FormFieldRow
field={mountWindoesGuestTools}
fieldType={FormFieldType.INLINE_CHECKBOX}
loadingResources={loadingResources}
>
<FormField>
<Checkbox
id={getFieldId(VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS)}
onChange={(v) => onChange(VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS, v)}
/>
</FormField>
<Text className="kubevirt-create-vm-modal__sub-field-row">
See <strong>Advanced &gt; Virtual Hardware</strong> for more information
</Text>
</FormFieldRow>
)}
<FormFieldRow
field={flavorField}
fieldType={FormFieldType.SELECT}
Expand Down Expand Up @@ -141,8 +161,9 @@ type OSFlavorProps = {
commonTemplates: any;
flavorField: any;
operatinSystemField: any;
mountWindowsGuestTools: any;
userTemplate: string;
workloadProfile: string;
openshiftFlag: boolean;
onChange: (key: string, value: string) => void;
onChange: (key: string, value: string | boolean) => void;
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@
.kubevirt-create-vm-modal__memory-row {
margin-right: 0.5em;
}

.kubevirt-create-vm-modal__sub-field-row {
padding-top: var(--pf-global--spacer--sm);
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export class VMSettingsTabComponent extends React.Component<VMSettingsTabCompone
userTemplates={userTemplates}
commonTemplates={commonTemplates}
operatinSystemField={this.getField(VMSettingsField.OPERATING_SYSTEM)}
mountWindowsGuestTools={this.getField(VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS)}
flavorField={this.getField(VMSettingsField.FLAVOR)}
userTemplate={this.getFieldValue(VMSettingsField.USER_TEMPLATE)}
workloadProfile={this.getFieldValue(VMSettingsField.WORKLOAD_PROFILE)}
Expand Down Expand Up @@ -144,7 +145,7 @@ const stateToProps = (state, { wizardReduxID }) => ({
});

type VMSettingsTabComponentProps = {
onFieldChange: (key: VMSettingsRenderableField, value: string) => void;
onFieldChange: (key: VMSettingsRenderableField, value: any) => void;
updateStorage: (storage: VMWizardStorage) => void;
vmSettings: any;
provisionSourceStorage: VMWizardStorage;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ export enum VMSettingsField {
IMAGE_URL = 'IMAGE_URL',
USER_TEMPLATE = 'USER_TEMPLATE',
OPERATING_SYSTEM = 'OPERATING_SYSTEM',
MOUNT_WINDOWS_GUEST_TOOLS = 'MOUNT_WINDOWS_GUEST_TOOLS',
FLAVOR = 'FLAVOR',
MEMORY = 'MEMORY',
CPU = 'CPU',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,12 @@ const renderableFieldOrder: { [key in RenderableField]: number } = {
[VMSettingsField.CONTAINER_IMAGE]: 22,
[VMSettingsField.IMAGE_URL]: 23,
[VMSettingsField.OPERATING_SYSTEM]: 24,
[VMSettingsField.FLAVOR]: 25,
[VMSettingsField.MEMORY]: 26,
[VMSettingsField.CPU]: 27,
[VMSettingsField.WORKLOAD_PROFILE]: 28,
[VMSettingsField.START_VM]: 29,
[VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS]: 25,
[VMSettingsField.FLAVOR]: 26,
[VMSettingsField.MEMORY]: 27,
[VMSettingsField.CPU]: 28,
[VMSettingsField.WORKLOAD_PROFILE]: 29,
[VMSettingsField.START_VM]: 30,
};

const idResolver: RenderableFieldResolver = {
Expand Down Expand Up @@ -70,6 +71,7 @@ const idResolver: RenderableFieldResolver = {
[VMSettingsField.CONTAINER_IMAGE]: 'provision-source-container',
[VMSettingsField.IMAGE_URL]: 'provision-source-url',
[VMSettingsField.OPERATING_SYSTEM]: 'operating-system-dropdown',
[VMSettingsField.MOUNT_WINDOWS_GUEST_TOOLS]: 'mount-windows-guest-tools-checkbox',
[VMSettingsField.FLAVOR]: 'flavor-dropdown',
[VMSettingsField.MEMORY]: 'resources-memory',
[VMSettingsField.CPU]: 'resources-cpu',
Expand Down

0 comments on commit 4eda5b6

Please sign in to comment.