diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js index 5617516e71..e6299bfd00 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/index.js @@ -29,6 +29,8 @@ import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helpe import { generateKey } from 'client/utils' import { T, RESOURCE_NAMES, VmTemplate } from 'client/constants' +let generalFeatures + export const STEP_ID = 'general' const Content = ({ isUpdate }) => { @@ -42,6 +44,8 @@ const Content = ({ isUpdate }) => { const dialog = dialogs?.create_dialog const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) + generalFeatures = features + return ( SECTIONS(hypervisor, isUpdate, features) .filter( @@ -83,7 +87,7 @@ const General = (vmTemplate) => { resolver: (formData) => { const hypervisor = formData?.[STEP_ID]?.HYPERVISOR ?? initialHypervisor - return SCHEMA(hypervisor, isUpdate) + return SCHEMA(hypervisor, isUpdate, generalFeatures) }, optionsValidate: { abortEarly: false }, content: () => Content({ isUpdate }), diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js index f5c5258962..f3a8a53824 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/CreateForm/Steps/General/schema.js @@ -96,11 +96,13 @@ const SECTIONS = (hypervisor, isUpdate, features) => /** * @param {HYPERVISORS} [hypervisor] - Template hypervisor + * @param {boolean} [isUpdate] - If `true`, the form is being updated + * @param {VmTemplateFeatures} [features] - Features * @returns {BaseSchema} Step schema */ -const SCHEMA = (hypervisor) => +const SCHEMA = (hypervisor, isUpdate, features) => getObjectSchemaFromFields( - SECTIONS(hypervisor) + SECTIONS(hypervisor, isUpdate, features) .map(({ fields }) => fields) .flat() ) diff --git a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js index 9c7dc6c82e..eda4d51561 100644 --- a/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js +++ b/src/fireedge/src/client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/index.js @@ -13,13 +13,14 @@ * See the License for the specific language governing permissions and * * limitations under the License. * * ------------------------------------------------------------------------- */ -import { useMemo } from 'react' +import { useMemo, useEffect } from 'react' import PropTypes from 'prop-types' import { useViews } from 'client/features/Auth' +import { useFormContext } from 'react-hook-form' +import { scaleVcpuByCpuFactor } from 'client/models/VirtualMachine' import FormWithSchema from 'client/components/Forms/FormWithSchema' import useStyles from 'client/components/Forms/VmTemplate/InstantiateForm/Steps/BasicConfiguration/styles' - import { SCHEMA, SECTIONS, @@ -27,24 +28,44 @@ import { import { getActionsAvailable as getSectionsAvailable } from 'client/models/Helper' import { T, RESOURCE_NAMES, VmTemplate } from 'client/constants' +let generalFeatures + export const STEP_ID = 'configuration' const Content = ({ vmTemplate }) => { const classes = useStyles() const { view, getResourceView } = useViews() + const { getValues, setValue } = useFormContext() + + const resource = RESOURCE_NAMES.VM_TEMPLATE + const { features, dialogs } = getResourceView(resource) const sections = useMemo(() => { const hypervisor = vmTemplate?.TEMPLATE?.HYPERVISOR - const resource = RESOURCE_NAMES.VM_TEMPLATE - const { features, dialogs } = getResourceView(resource) const dialog = dialogs?.instantiate_dialog const sectionsAvailable = getSectionsAvailable(dialog, hypervisor) + generalFeatures = features + return SECTIONS(vmTemplate, features).filter( ({ id, required }) => required || sectionsAvailable.includes(id) ) }, [view]) + useEffect(() => { + if (vmTemplate?.TEMPLATE?.VCPU && features?.cpu_factor) { + const oldValues = { + ...getValues(), + } + oldValues.configuration.CPU = `${scaleVcpuByCpuFactor( + vmTemplate.TEMPLATE.VCPU, + features.cpu_factor + )}` + + setValue(`${STEP_ID}`, oldValues) + } + }, []) + return (
{sections.map(({ id, legend, fields }) => ( @@ -74,7 +95,7 @@ Content.propTypes = { const BasicConfiguration = (vmTemplate) => ({ id: STEP_ID, label: T.Configuration, - resolver: () => SCHEMA(vmTemplate), + resolver: () => SCHEMA(vmTemplate, generalFeatures), optionsValidate: { abortEarly: false }, content: (props) => Content({ ...props, vmTemplate }), })