diff options
author | Lars Wirzenius <liw@liw.fi> | 2023-09-08 18:38:15 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2023-09-08 18:38:15 +0300 |
commit | 9e52fa76411a37fce9c455efa70e2f6b1a5c1071 (patch) | |
tree | 2dcb65eed265c5fbb6682645b9dfc2e0b9f69fb5 | |
parent | 669a34a9bd7cbbd92203d5a18260de3d4aa0b7f2 (diff) | |
download | vmadm-9e52fa76411a37fce9c455efa70e2f6b1a5c1071.tar.gz |
feat: "reboot" subcommand
Sponsored-by: author
-rw-r--r-- | src/bin/vmadm.rs | 14 | ||||
-rw-r--r-- | src/cmd/mod.rs | 3 | ||||
-rw-r--r-- | src/cmd/reboot.rs | 32 | ||||
-rw-r--r-- | vmadm.md | 8 |
4 files changed, 57 insertions, 0 deletions
diff --git a/src/bin/vmadm.rs b/src/bin/vmadm.rs index 159a172..b515e45 100644 --- a/src/bin/vmadm.rs +++ b/src/bin/vmadm.rs @@ -67,6 +67,14 @@ enum Command { specs: Vec<PathBuf>, }, + #[clap(visible_alias = "restart")] + Reboot { + #[clap(flatten)] + common: CommonOptions, + + specs: Vec<PathBuf>, + }, + #[clap(visible_alias = "stop")] Shutdown { #[clap(flatten)] @@ -144,6 +152,12 @@ fn main() -> anyhow::Result<()> { cmd::start(&specs, &progress)?; } + Command::Reboot { common, specs } => { + let progress = get_progress(&common); + let specs = get_specs(&common, &specs)?; + cmd::reboot(&specs, &progress)?; + } + Command::Shutdown { common, specs } => { let progress = get_progress(&common); let specs = get_specs(&common, &specs)?; diff --git a/src/cmd/mod.rs b/src/cmd/mod.rs index dda28da..2659b4b 100644 --- a/src/cmd/mod.rs +++ b/src/cmd/mod.rs @@ -29,3 +29,6 @@ pub use config::config; pub mod spec; pub use spec::spec; + +pub mod reboot; +pub use reboot::reboot; 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(()) +} @@ -258,6 +258,14 @@ when I run ssh -F .ssh/config debian@smoke hostname when I run vmadm start --config config.yaml smoke.yaml ~~~ +Do it again, but using the `vmadm reboot` helper command. + + +~~~scenario +when I run vmadm reboot --config config.yaml smoke.yaml +when I run ssh -F .ssh/config debian@smoke hostname +~~~ + Finally, we delete it twice. ~~~scenario |