diff options
author | Lars Wirzenius <liw@liw.fi> | 2021-08-06 09:41:34 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2021-08-06 10:21:58 +0300 |
commit | a54cbbb7f3d3750f4c3fea3ba999dac978ec394a (patch) | |
tree | ab941b542ff104664af5feb174e97eb271bbfc54 /src/bin | |
parent | 6fc3ad8a6758bb6c764ba208d814c1ab82d764ac (diff) | |
download | vmadm-a54cbbb7f3d3750f4c3fea3ba999dac978ec394a.tar.gz |
feat: add progress reporting
Sponsored-by: author
Diffstat (limited to 'src/bin')
-rw-r--r-- | src/bin/vmadm.rs | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/src/bin/vmadm.rs b/src/bin/vmadm.rs index a288036..5e27761 100644 --- a/src/bin/vmadm.rs +++ b/src/bin/vmadm.rs @@ -5,6 +5,7 @@ use std::path::{Path, PathBuf}; use structopt::StructOpt; use vmadm::cmd; use vmadm::config::Configuration; +use vmadm::progress::{MessageKind, Progress}; use vmadm::spec::Specification; const QUALIFIER: &str = ""; @@ -85,6 +86,12 @@ enum Command { struct CommonOptions { #[structopt(short, long, parse(from_os_str))] config: Option<PathBuf>, + + #[structopt(short, long)] + quiet: bool, + + #[structopt(short, long)] + verbose: bool, } fn main() -> anyhow::Result<()> { @@ -94,38 +101,45 @@ fn main() -> anyhow::Result<()> { match cli.cmd { Command::New { common, spec } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::new(&specs)?; + cmd::new(&specs, &progress)?; } Command::Config { common } => { + let progress = get_progress(&common); let config = config(&common)?; - cmd::config(&config)?; + cmd::config(&config, &progress)?; } Command::Spec { common, spec } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::spec(&specs)?; + cmd::spec(&specs, &progress)?; } Command::List { common } => { + let progress = get_progress(&common); let config = config(&common)?; - cmd::list(&config)?; + cmd::list(&config, &progress)?; } Command::Delete { common, spec } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::delete(&specs)?; + cmd::delete(&specs, &progress)?; } Command::Start { common, spec } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::start(&specs)?; + cmd::start(&specs, &progress)?; } Command::Shutdown { common, spec } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::shutdown(&specs)?; + cmd::shutdown(&specs, &progress)?; } Command::CloudInit { @@ -133,13 +147,24 @@ fn main() -> anyhow::Result<()> { spec, dirname, } => { + let progress = get_progress(&common); let specs = get_specs(&common, &spec)?; - cmd::cloud_init(&specs, &dirname)?; + cmd::cloud_init(&specs, &progress, &dirname)?; } } Ok(()) } +fn get_progress(common: &CommonOptions) -> Progress { + if common.quiet { + Progress::new(MessageKind::OnlyErrors) + } else if common.verbose { + Progress::new(MessageKind::Everything) + } else { + Progress::new(MessageKind::Steps) + } +} + fn get_specs(common: &CommonOptions, spec: &Path) -> anyhow::Result<Vec<Specification>> { let config = config(common)?; let specs = Specification::from_file(&config, spec)?; |