summaryrefslogtreecommitdiff
path: root/src/libvirt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libvirt.rs')
-rw-r--r--src/libvirt.rs32
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()?;