diff options
Diffstat (limited to 'src/libvirt.rs')
-rw-r--r-- | src/libvirt.rs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/src/libvirt.rs b/src/libvirt.rs index c93bd9f..2162f3c 100644 --- a/src/libvirt.rs +++ b/src/libvirt.rs @@ -87,17 +87,38 @@ impl Libvirt { Ok(()) } - pub fn start(&self, name: &str) -> Result<(), VirtError> { + pub fn trigger_start(&self, name: &str) -> Result<(), VirtError> { if let Some(domain) = self.get_domain(name)? { - domain.create()?; + if !domain.is_active()? { + debug!("starting {}", name); + domain.create()?; + } + } + Ok(()) + } + + pub fn start(&self, name: &str) -> Result<(), VirtError> { + if let Some(_) = self.get_domain(name)? { + self.trigger_start(name)?; wait_for_ssh(name); } Ok(()) } + pub fn trigger_shutdown(&self, name: &str) -> Result<(), VirtError> { + if let Some(domain) = self.get_domain(name)? { + debug!("asking {} to shut down", name); + if domain.is_active()? { + domain.shutdown()?; + } + } + Ok(()) + } + pub fn shutdown(&self, name: &str) -> Result<(), VirtError> { if let Some(domain) = self.get_domain(name)? { - domain.shutdown()?; + debug!("shutting down {}", name); + self.trigger_shutdown(name)?; wait_until_inactive(&domain, name); } Ok(()) @@ -105,10 +126,7 @@ impl Libvirt { pub fn delete(&self, name: &str, image: &Path) -> Result<(), VirtError> { if let Some(domain) = self.get_domain(name)? { - debug!("shutting down {}", name); - domain.shutdown().ok(); - - wait_until_inactive(&domain, name); + self.shutdown(name)?; debug!("undefine {}", name); domain.undefine()?; |