summaryrefslogtreecommitdiff
path: root/src/cmd/delete.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/delete.rs')
-rw-r--r--src/cmd/delete.rs55
1 files changed, 5 insertions, 50 deletions
diff --git a/src/cmd/delete.rs b/src/cmd/delete.rs
index a9a0660..66eb23f 100644
--- a/src/cmd/delete.rs
+++ b/src/cmd/delete.rs
@@ -1,62 +1,17 @@
//! The `delete` sub-command.
+use crate::libvirt::{Libvirt, VirtError};
use crate::spec::Specification;
-use log::{debug, info};
-use std::thread;
-use std::time::Duration;
-use virt::connect::Connect;
-
-/// Errors from this module.
-#[derive(Debug, thiserror::Error)]
-pub enum DeleteError {
- /// Error creating virtual machine.
- #[error(transparent)]
- VirtError(#[from] virt::error::Error),
-
- /// Error doing I/O.
- #[error(transparent)]
- IoError(#[from] std::io::Error),
-}
+use log::info;
/// Delete VMs corresponding to specifications.
///
/// Delete the VM corresponding to each specification provided by the caller.
-pub fn delete(specs: &[Specification]) -> Result<(), DeleteError> {
+pub fn delete(specs: &[Specification]) -> Result<(), VirtError> {
+ let libvirt = Libvirt::connect("qemu:///system")?;
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!("undefine {}", spec.name);
- domain.undefine()?;
-
- debug!("removing image file {}", spec.image.display());
- std::fs::remove_file(&spec.image)?;
- }
- }
+ libvirt.delete(&spec.name, &spec.image)?;
}
Ok(())
}