diff options
Diffstat (limited to 'src/cmd/reboot.rs')
-rw-r--r-- | src/cmd/reboot.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/cmd/reboot.rs b/src/cmd/reboot.rs new file mode 100644 index 0000000..ebbea4b --- /dev/null +++ b/src/cmd/reboot.rs @@ -0,0 +1,32 @@ +//! The `reboot` sub-command. + +use crate::cmd::shutdown::shutdown; +use crate::cmd::start::{start, StartError}; +use crate::libvirt::VirtError; +use crate::progress::Progress; +use crate::spec::Specification; + +/// Errors returned by this module. +#[derive(Debug, thiserror::Error)] +pub enum RebootError { + /// Problem with new. + #[error(transparent)] + New(#[from] StartError), + + /// Problem from libvirt server. + #[error(transparent)] + VirtError(#[from] VirtError), +} + +/// The `recreate` sub-command. +/// +/// This shuts down, then starts virtual machines. +pub fn reboot(specs: &[Specification], progress: &Progress) -> Result<(), RebootError> { + progress.chatty("Restarting virtual machines"); + + shutdown(specs, progress)?; + start(specs, progress)?; + + progress.chatty("Restart successful"); + Ok(()) +} |