This commit is contained in:
parent
a3ac56f849
commit
794d16bdaa
@ -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,
|
||||
},
|
||||
|
@ -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 {
|
||||
|
@ -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";
|
||||
|
@ -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?.();
|
||||
}}
|
||||
/>
|
||||
|
Loading…
x
Reference in New Issue
Block a user