diff options
Diffstat (limited to 'src/cmd/delete.rs')
-rw-r--r-- | src/cmd/delete.rs | 60 |
1 files changed, 31 insertions, 29 deletions
diff --git a/src/cmd/delete.rs b/src/cmd/delete.rs index ac8c5b4..3f60e27 100644 --- a/src/cmd/delete.rs +++ b/src/cmd/delete.rs @@ -13,39 +13,41 @@ pub enum DeleteError { IoError(#[from] std::io::Error), } -pub fn delete(spec: &Specification) -> Result<(), DeleteError> { - info!("deleting virtual machine {}", spec.name); - - debug!("connecting to libvirtd"); - let conn = Connect::open("qemu:///system")?; - - debug!("listing all domains"); - let domains = conn.list_all_domains(0)?; - - for domain in domains { - debug!("considering {}", domain.get_name()?); - if domain.get_name()? == spec.name { - debug!("shutdown {}", spec.name); - domain.shutdown().ok(); - - let briefly = Duration::from_millis(1000); - loop { - thread::sleep(briefly); - match domain.is_active() { - Ok(true) => (), - Ok(false) => break, - Err(err) => { - debug!("is_active: {}", err); +pub fn delete(specs: &[Specification]) -> Result<(), DeleteError> { + for spec in specs { + info!("deleting virtual machine {}", spec.name); + + debug!("connecting to libvirtd"); + let conn = Connect::open("qemu:///system")?; + + debug!("listing all domains"); + let domains = conn.list_all_domains(0)?; + + for domain in domains { + debug!("considering {}", domain.get_name()?); + if domain.get_name()? == spec.name { + debug!("shutdown {}", spec.name); + domain.shutdown().ok(); + + let briefly = Duration::from_millis(1000); + loop { + thread::sleep(briefly); + match domain.is_active() { + Ok(true) => (), + Ok(false) => break, + Err(err) => { + debug!("is_active: {}", err); + } } + debug!("{} is still running", spec.name); } - debug!("{} is still running", spec.name); - } - debug!("undefine {}", spec.name); - domain.undefine()?; + debug!("undefine {}", spec.name); + domain.undefine()?; - debug!("removing image file {}", spec.image.display()); - std::fs::remove_file(&spec.image)?; + debug!("removing image file {}", spec.image.display()); + std::fs::remove_file(&spec.image)?; + } } } Ok(()) |