Can backup vm disks as images

This commit is contained in:
2025-05-30 10:55:40 +02:00
parent 83df7e1b20
commit 6b6fef5ccc
6 changed files with 84 additions and 28 deletions

View File

@ -1,4 +1,5 @@
import { APIClient } from "./ApiClient";
import { VMFileDisk, VMInfo } from "./VMApi";
export type DiskImageFormat =
| { format: "Raw"; is_sparse: boolean }
@ -77,6 +78,22 @@ export class DiskImageApi {
});
}
/**
* Backup VM disk into image disks library
*/
static async BackupVMDisk(
vm: VMInfo,
disk: VMFileDisk,
dest_file_name: string,
format: DiskImageFormat
): Promise<void> {
await APIClient.exec({
uri: `/vm/${vm.uuid}/disk/${disk.name}/backup`,
method: "POST",
jsonData: { ...format, dest_file_name },
});
}
/**
* Delete disk image file
*/

View File

@ -5,7 +5,6 @@
*/
import { APIClient } from "./ApiClient";
import { DiskImageFormat } from "./DiskImageApi";
export type VMState =
| "NoState"
@ -385,20 +384,4 @@ export class VMApi {
encodeURIComponent(token)
);
}
/**
* Backup VM disk
*/
static async BackupDisk(
vm: VMInfo,
disk: VMFileDisk,
file_name: string,
format: DiskImageFormat
): Promise<void> {
await APIClient.exec({
uri: `/vm/${vm.uuid}/disk/${disk.name}/backup`,
method: "POST",
jsonData: { ...format, file_name },
});
}
}

View File

@ -9,7 +9,7 @@ import {
import React from "react";
import { DiskImage, DiskImageApi, DiskImageFormat } from "../api/DiskImageApi";
import { ServerApi } from "../api/ServerApi";
import { VMApi, VMFileDisk, VMInfo } from "../api/VMApi";
import { VMFileDisk, VMInfo } from "../api/VMApi";
import { useAlert } from "../hooks/providers/AlertDialogProvider";
import { useLoadingMessage } from "../hooks/providers/LoadingMessageProvider";
import { useSnackbar } from "../hooks/providers/SnackbarProvider";
@ -60,7 +60,8 @@ export function ConvertDiskImageDialog(
);
// Perform the conversion / backup operation
if (p.backup) await VMApi.BackupDisk(p.vm, p.disk, filename, format);
if (p.backup)
await DiskImageApi.BackupVMDisk(p.vm, p.disk, filename, format);
else await DiskImageApi.Convert(p.image, filename, format);
p.onFinished();