Define disks as vec instead of option

This commit is contained in:
Pierre HUBERT 2023-10-20 10:52:28 +02:00
parent d93a2b857a
commit a30f9720ca
3 changed files with 17 additions and 5 deletions

View File

@ -105,8 +105,20 @@ pub struct DefineDomainReq(pub DomainXML);
impl Handler<DefineDomainReq> for LibVirtActor { impl Handler<DefineDomainReq> for LibVirtActor {
type Result = anyhow::Result<DomainXMLUuid>; type Result = anyhow::Result<DomainXMLUuid>;
fn handle(&mut self, msg: DefineDomainReq, _ctx: &mut Self::Context) -> Self::Result { fn handle(&mut self, mut msg: DefineDomainReq, _ctx: &mut Self::Context) -> Self::Result {
let xml = serde_xml_rs::to_string(&msg.0)?; // A issue with the disks definition serialization needs them to be serialized aside
let mut disks_xml = Vec::with_capacity(msg.0.devices.disks.len());
for disk in msg.0.devices.disks {
let disk_xml = serde_xml_rs::to_string(&disk)?;
let start_offset = disk_xml.find("<disk").unwrap();
disks_xml.push(disk_xml[start_offset..].to_string());
}
msg.0.devices.disks = vec![];
let mut xml = serde_xml_rs::to_string(&msg.0)?;
let disks_xml = disks_xml.join("\n");
xml = xml.replacen("<devices>", &format!("<devices>{disks_xml}"), 1);
log::debug!("Define domain:\n{}", xml); log::debug!("Define domain:\n{}", xml);
let domain = Domain::define_xml(&self.m, &xml)?; let domain = Domain::define_xml(&self.m, &xml)?;
DomainXMLUuid::parse_from_str(&domain.get_uuid_string()?) DomainXMLUuid::parse_from_str(&domain.get_uuid_string()?)

View File

@ -65,8 +65,8 @@ pub struct DevicesXML {
pub graphics: Option<GraphicsXML>, pub graphics: Option<GraphicsXML>,
/// Disks (used for storage) /// Disks (used for storage)
#[serde(default, rename = "disk")] #[serde(default, rename = "disk", skip_serializing_if = "Vec::is_empty")]
pub disks: Option<DiskXML>, // TODO : change to vec pub disks: Vec<DiskXML>,
} }
/// Screen information /// Screen information

View File

@ -191,7 +191,7 @@ impl VMInfo {
devices: DevicesXML { devices: DevicesXML {
graphics: vnc_graphics, graphics: vnc_graphics,
disks: disks.into_iter().next(), disks,
}, },
memory: DomainMemoryXML { memory: DomainMemoryXML {