diff --git a/src/components/forms/DiskDeviceFormCustom.tsx b/src/components/forms/DiskDeviceFormCustom.tsx index 38133afcd7..8180a500ba 100644 --- a/src/components/forms/DiskDeviceFormCustom.tsx +++ b/src/components/forms/DiskDeviceFormCustom.tsx @@ -15,7 +15,10 @@ import { getConfigurationRowBase } from "components/ConfigurationRow"; import DetachDiskDeviceBtn from "pages/instances/actions/DetachDiskDeviceBtn"; import classnames from "classnames"; import { LxdStorageVolume } from "types/storage"; -import { isDiskDeviceMountPointMissing } from "util/instanceValidation"; +import { + isDiskDeviceMountPointMissing, + isRootDisk, +} from "util/instanceValidation"; import { ensureEditMode } from "util/instanceEdit"; import { getExistingDeviceNames } from "util/devices"; import { LxdProfile } from "types/profile"; @@ -29,7 +32,7 @@ interface Props { const DiskDeviceFormCustom: FC = ({ formik, project, profiles }) => { const readOnly = (formik.values as EditInstanceFormValues).readOnly; const customVolumes = formik.values.devices - .filter((device) => device.name !== "root" && device.type === "disk") + .filter((item) => item.type === "disk" && !isRootDisk(item)) .map((device) => device as FormDiskDevice); const focusField = (name: string) => { diff --git a/src/components/forms/DiskDeviceFormRoot.tsx b/src/components/forms/DiskDeviceFormRoot.tsx index 5498695c82..30e7c5a362 100644 --- a/src/components/forms/DiskDeviceFormRoot.tsx +++ b/src/components/forms/DiskDeviceFormRoot.tsx @@ -12,7 +12,7 @@ import DiskSizeSelector from "components/forms/DiskSizeSelector"; import { LxdStoragePool } from "types/storage"; import { LxdProfile } from "types/profile"; import { removeDevice } from "util/formDevices"; -import { hasNoRootDisk } from "util/instanceValidation"; +import { hasNoRootDisk, isRootDisk } from "util/instanceValidation"; import { ensureEditMode } from "util/instanceEdit"; interface Props { @@ -29,9 +29,7 @@ const DiskDeviceFormRoot: FC = ({ profiles, }) => { const readOnly = (formik.values as EditInstanceFormValues).readOnly; - const rootIndex = formik.values.devices.findIndex( - (item) => item.type === "disk" && item.name === "root", - ); + const rootIndex = formik.values.devices.findIndex(isRootDisk); const hasRootStorage = rootIndex !== -1; const formRootDevice = formik.values.devices[ rootIndex @@ -46,7 +44,7 @@ const DiskDeviceFormRoot: FC = ({ const copy = [...formik.values.devices]; copy.push({ type: "disk", - name: "root", + name: inheritValue?.name ? inheritValue.name : "root", path: "/", pool: inheritValue ? inheritValue.pool : (pools[0]?.name ?? undefined), }); diff --git a/src/util/configInheritance.tsx b/src/util/configInheritance.tsx index 257e092adc..e410606e0d 100644 --- a/src/util/configInheritance.tsx +++ b/src/util/configInheritance.tsx @@ -258,7 +258,10 @@ export const getInheritedRootStorage = ( .find((item) => (item.device as LxdDiskDevice).path === "/"); if (rootDisk) { - return [rootDisk.device as LxdDiskDevice, rootDisk.source]; + return [ + { ...rootDisk.device, name: rootDisk.key } as LxdDiskDevice, + rootDisk.source, + ]; } return [null, "LXD"]; diff --git a/src/util/instanceValidation.tsx b/src/util/instanceValidation.tsx index 48351803d7..5e8864a185 100644 --- a/src/util/instanceValidation.tsx +++ b/src/util/instanceValidation.tsx @@ -18,8 +18,12 @@ export const hasNoRootDisk = ( return missingRoot(values.devices) && !inheritsRoot(values, profiles); }; +export const isRootDisk = (device: FormDevice): device is FormDiskDevice => { + return device.type === "disk" && device.path === "/" && !device.source; +}; + const missingRoot = (devices: FormDevice[]): boolean => { - return !devices.some((item) => item.type === "disk" && item.name === "root"); + return !devices.some(isRootDisk); }; const inheritsRoot = (