Can attach defined networks to domains
This commit is contained in:
@ -63,11 +63,20 @@ pub struct FeaturesXML {
|
||||
#[serde(rename = "acpi")]
|
||||
pub struct ACPIXML {}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
#[serde(rename = "source")]
|
||||
pub struct NetIntSourceXML {
|
||||
#[serde(rename(serialize = "@network"))]
|
||||
pub network: String,
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
#[serde(rename = "interface")]
|
||||
pub struct DomainNetInterfaceXML {
|
||||
#[serde(rename(serialize = "@type"))]
|
||||
pub r#type: String,
|
||||
|
||||
pub source: Option<NetIntSourceXML>,
|
||||
}
|
||||
|
||||
/// Devices information
|
||||
|
@ -3,7 +3,7 @@ use crate::constants;
|
||||
use crate::libvirt_lib_structures::{
|
||||
DevicesXML, DiskBootXML, DiskDriverXML, DiskReadOnlyXML, DiskSourceXML, DiskTargetXML, DiskXML,
|
||||
DomainCPUTopology, DomainCPUXML, DomainMemoryXML, DomainNetInterfaceXML, DomainVCPUXML,
|
||||
DomainXML, FeaturesXML, GraphicsXML, NetworkDHCPRangeXML, NetworkDHCPXML,
|
||||
DomainXML, FeaturesXML, GraphicsXML, NetIntSourceXML, NetworkDHCPRangeXML, NetworkDHCPXML,
|
||||
NetworkDNSForwarderXML, NetworkDNSXML, NetworkDomainXML, NetworkForwardXML, NetworkIPXML,
|
||||
NetworkXML, OSLoaderXML, OSTypeXML, XMLUuid, ACPIXML, OSXML,
|
||||
};
|
||||
@ -68,7 +68,7 @@ pub enum VMArchitecture {
|
||||
#[serde(tag = "type")]
|
||||
pub enum Network {
|
||||
UserspaceSLIRPStack,
|
||||
// TODO : complete network types
|
||||
DefinedNetwork { network: String }, // TODO : complete network types
|
||||
}
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
@ -226,6 +226,11 @@ impl VMInfo {
|
||||
networks.push(match n {
|
||||
Network::UserspaceSLIRPStack => DomainNetInterfaceXML {
|
||||
r#type: "user".to_string(),
|
||||
source: None,
|
||||
},
|
||||
Network::DefinedNetwork { network } => DomainNetInterfaceXML {
|
||||
r#type: "network".to_string(),
|
||||
source: Some(NetIntSourceXML { network }),
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -344,6 +349,9 @@ impl VMInfo {
|
||||
.iter()
|
||||
.map(|d| match d.r#type.as_str() {
|
||||
"user" => Ok(Network::UserspaceSLIRPStack),
|
||||
"network" => Ok(Network::DefinedNetwork {
|
||||
network: d.source.as_ref().unwrap().network.to_string(),
|
||||
}),
|
||||
a => Err(LibVirtStructError::DomainExtraction(format!(
|
||||
"Unknown network interface type: {a}! "
|
||||
))),
|
||||
|
Reference in New Issue
Block a user