summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2021-08-06 09:41:34 +0300
committerLars Wirzenius <liw@liw.fi>2021-08-06 10:21:58 +0300
commita54cbbb7f3d3750f4c3fea3ba999dac978ec394a (patch)
treeab941b542ff104664af5feb174e97eb271bbfc54 /src/bin
parent6fc3ad8a6758bb6c764ba208d814c1ab82d764ac (diff)
downloadvmadm-a54cbbb7f3d3750f4c3fea3ba999dac978ec394a.tar.gz
feat: add progress reporting
Sponsored-by: author
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/vmadm.rs41
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)?;