Simplify raw disks definition
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Pierre HUBERT 2025-05-30 11:15:21 +02:00
parent a3ac56f849
commit 794d16bdaa
4 changed files with 19 additions and 34 deletions

View File

@ -13,20 +13,13 @@ enum VMDisksError {
Config(&'static str),
}
/// Type of disk allocation
#[derive(Copy, Clone, Debug, serde::Serialize, serde::Deserialize, Eq, PartialEq)]
pub enum VMDiskAllocType {
Fixed,
Sparse,
}
/// Disk allocation type
#[derive(serde::Serialize, serde::Deserialize)]
#[serde(tag = "format")]
pub enum VMDiskFormat {
Raw {
/// Type of disk allocation
alloc_type: VMDiskAllocType,
/// Is raw file a sparse file?
is_sparse: bool,
},
QCow2,
}
@ -61,12 +54,7 @@ impl VMFileDisk {
},
format: match info.format {
DiskFileFormat::Raw { is_sparse } => VMDiskFormat::Raw {
alloc_type: match is_sparse {
true => VMDiskAllocType::Sparse,
false => VMDiskAllocType::Fixed,
},
},
DiskFileFormat::Raw { is_sparse } => VMDiskFormat::Raw { is_sparse },
DiskFileFormat::QCow2 { .. } => VMDiskFormat::QCow2,
_ => anyhow::bail!("Unsupported image format: {:?}", info.format),
},
@ -131,9 +119,7 @@ impl VMFileDisk {
DiskFileInfo::create(
&file,
match self.format {
VMDiskFormat::Raw { alloc_type } => DiskFileFormat::Raw {
is_sparse: alloc_type == VMDiskAllocType::Sparse,
},
VMDiskFormat::Raw { is_sparse } => DiskFileFormat::Raw { is_sparse },
VMDiskFormat::QCow2 => DiskFileFormat::QCow2 {
virtual_size: self.size,
},

View File

@ -29,11 +29,9 @@ export interface BaseFileVMDisk {
deleteType?: "keepfile" | "deletefile";
}
export type DiskAllocType = "Sparse" | "Fixed";
interface RawVMDisk {
format: "Raw";
alloc_type: DiskAllocType;
is_sparse: boolean;
}
interface QCow2Disk {

View File

@ -12,7 +12,6 @@ import { ServerApi } from "../api/ServerApi";
import { VMFileDisk, VMInfo } from "../api/VMApi";
import { useAlert } from "../hooks/providers/AlertDialogProvider";
import { useLoadingMessage } from "../hooks/providers/LoadingMessageProvider";
import { useSnackbar } from "../hooks/providers/SnackbarProvider";
import { FileDiskImageWidget } from "../widgets/FileDiskImageWidget";
import { CheckboxInput } from "../widgets/forms/CheckboxInput";
import { SelectInput } from "../widgets/forms/SelectInput";

View File

@ -13,13 +13,14 @@ import {
Tooltip,
} from "@mui/material";
import { filesize } from "filesize";
import React from "react";
import { ServerApi } from "../../api/ServerApi";
import { VMFileDisk, VMInfo, VMState } from "../../api/VMApi";
import { ConvertDiskImageDialog } from "../../dialogs/ConvertDiskImageDialog";
import { useConfirm } from "../../hooks/providers/ConfirmDialogProvider";
import { CheckboxInput } from "./CheckboxInput";
import { SelectInput } from "./SelectInput";
import { TextInput } from "./TextInput";
import React from "react";
import { ConvertDiskImageDialog } from "../../dialogs/ConvertDiskImageDialog";
export function VMDisksList(p: {
vm: VMInfo;
@ -166,7 +167,9 @@ function DiskInfo(p: {
</>
}
secondary={`${filesize(p.disk.size)} - ${p.disk.format}${
p.disk.format == "Raw" ? " - " + p.disk.alloc_type : ""
p.disk.format == "Raw"
? " - " + (p.disk.is_sparse ? "Sparse" : "Fixed")
: ""
}`}
/>
</ListItem>
@ -218,21 +221,20 @@ function DiskInfo(p: {
value={p.disk.format}
onValueChange={(v) => {
p.disk.format = v as any;
if (p.disk.format === "Raw") p.disk.is_sparse = true;
p.onChange?.();
}}
/>
{p.disk.format === "Raw" && (
<SelectInput
editable={true}
label="File allocation type"
options={[
{ label: "Sparse allocation", value: "Sparse" },
{ label: "Fixed allocation", value: "Fixed" },
]}
value={p.disk.alloc_type}
<CheckboxInput
editable
label="Sparse file"
checked={p.disk.is_sparse}
onValueChange={(v) => {
if (p.disk.format === "Raw") p.disk.alloc_type = v as any;
if (p.disk.format === "Raw") p.disk.is_sparse = v;
p.onChange?.();
}}
/>