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