diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-03-14 07:11:53 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-03-14 07:11:53 +0000 |
commit | e0b2904ef83b5a082f3bae1756bc7633a659c8fc (patch) | |
tree | b4e0698ae9f50b8757530f2332cb1c40872d4a5c /src/cmd/start.rs | |
parent | d4cba41b5674e6ca1cbd5669aeb42d5f7d62e8bd (diff) | |
parent | b8119579a246727805a03c5a8e60fb44109410f6 (diff) | |
download | vmadm-e0b2904ef83b5a082f3bae1756bc7633a659c8fc.tar.gz |
Merge branch 'iso' into 'main'
fix: VMs can be restarted
Closes #17
See merge request larswirzenius/vmadm!19
Diffstat (limited to 'src/cmd/start.rs')
-rw-r--r-- | src/cmd/start.rs | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cmd/start.rs b/src/cmd/start.rs new file mode 100644 index 0000000..a69f54c --- /dev/null +++ b/src/cmd/start.rs @@ -0,0 +1,31 @@ +//! The `start` sub-command. + +use crate::libvirt::{Libvirt, VirtError}; +use crate::spec::Specification; +use crate::util::wait_for_ssh; +use log::info; + +/// Errors from this module. +#[derive(Debug, thiserror::Error)] +pub enum StartError { + /// Error from libvirt. + #[error(transparent)] + VirtError(#[from] VirtError), + + /// Error doing I/O. + #[error(transparent)] + IoError(#[from] std::io::Error), +} + +/// Start existing VMs corresponding to specifications. +pub fn start(specs: &[Specification]) -> Result<(), StartError> { + let libvirt = Libvirt::connect("qemu:///system")?; + for spec in specs { + info!("starting virtual machine {}", spec.name); + libvirt.start(&spec.name)?; + } + for spec in specs { + wait_for_ssh(&spec.name); + } + Ok(()) +} |