Can select disk bus type when adding new disk to VM
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
@ -6,7 +6,7 @@ use crate::libvirt_rest_structures::LibVirtStructError;
|
||||
use crate::libvirt_rest_structures::LibVirtStructError::StructureExtraction;
|
||||
use crate::utils::file_size_utils::FileSize;
|
||||
use crate::utils::files_utils;
|
||||
use crate::utils::vm_file_disks_utils::{VMDiskFormat, VMFileDisk};
|
||||
use crate::utils::vm_file_disks_utils::{VMDiskBus, VMDiskFormat, VMFileDisk};
|
||||
use lazy_regex::regex;
|
||||
use num::Integer;
|
||||
|
||||
@ -313,7 +313,11 @@ impl VMInfo {
|
||||
"vd{}",
|
||||
["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"][disks.len()]
|
||||
),
|
||||
bus: "virtio".to_string(),
|
||||
bus: match disk.bus {
|
||||
VMDiskBus::Virtio => "virtio",
|
||||
VMDiskBus::Sata => "sata",
|
||||
}
|
||||
.to_string(),
|
||||
},
|
||||
readonly: None,
|
||||
boot: DiskBootXML {
|
||||
@ -479,7 +483,7 @@ impl VMInfo {
|
||||
.iter()
|
||||
.filter(|d| d.device == "disk")
|
||||
.map(|d| {
|
||||
VMFileDisk::load_from_file(&d.source.file)
|
||||
VMFileDisk::load_from_file(&d.source.file, &d.target.bus)
|
||||
.expect("Failed to load file disk information!")
|
||||
})
|
||||
.collect(),
|
||||
|
@ -13,6 +13,12 @@ enum VMDisksError {
|
||||
Config(&'static str),
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
pub enum VMDiskBus {
|
||||
Virtio,
|
||||
Sata,
|
||||
}
|
||||
|
||||
/// Disk allocation type
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
#[serde(tag = "format")]
|
||||
@ -30,6 +36,8 @@ pub struct VMFileDisk {
|
||||
pub name: String,
|
||||
/// Disk size, in bytes
|
||||
pub size: FileSize,
|
||||
/// Disk bus
|
||||
pub bus: VMDiskBus,
|
||||
/// Disk format
|
||||
#[serde(flatten)]
|
||||
pub format: VMDiskFormat,
|
||||
@ -41,7 +49,7 @@ pub struct VMFileDisk {
|
||||
}
|
||||
|
||||
impl VMFileDisk {
|
||||
pub fn load_from_file(path: &str) -> anyhow::Result<Self> {
|
||||
pub fn load_from_file(path: &str, bus: &str) -> anyhow::Result<Self> {
|
||||
let file = Path::new(path);
|
||||
|
||||
let info = DiskFileInfo::load_file(file)?;
|
||||
@ -61,6 +69,13 @@ impl VMFileDisk {
|
||||
DiskFileFormat::QCow2 { .. } => VMDiskFormat::QCow2,
|
||||
_ => anyhow::bail!("Unsupported image format: {:?}", info.format),
|
||||
},
|
||||
|
||||
bus: match bus {
|
||||
"virtio" => VMDiskBus::Virtio,
|
||||
"sata" => VMDiskBus::Sata,
|
||||
_ => anyhow::bail!("Unsupported disk bus type: {bus}"),
|
||||
},
|
||||
|
||||
delete: false,
|
||||
from_image: None,
|
||||
})
|
||||
|
Reference in New Issue
Block a user