From c22f92aee4aa9a3f3368562b4f1e3e09ab84df8c Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Wed, 9 Nov 2022 10:09:20 -0800 Subject: [PATCH 1/2] Tidy up plan / install UX --- src/cli/subcommand/install.rs | 9 ++++++++- src/cli/subcommand/plan.rs | 3 +-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/cli/subcommand/install.rs b/src/cli/subcommand/install.rs index 38f1fc8..c24273c 100644 --- a/src/cli/subcommand/install.rs +++ b/src/cli/subcommand/install.rs @@ -29,7 +29,7 @@ pub struct Install { pub plan: Option, #[clap(subcommand)] - pub planner: BuiltinPlanner, + pub planner: Option, } #[async_trait::async_trait] @@ -43,6 +43,13 @@ impl CommandExecute for Install { explain, } = self; + let planner = match planner { + Some(planner) => planner, + None => BuiltinPlanner::default() + .await + .map_err(|e| eyre::eyre!(e))?, + }; + let mut plan = match &plan { Some(plan_path) => { let install_plan_string = tokio::fs::read_to_string(&plan_path) diff --git a/src/cli/subcommand/plan.rs b/src/cli/subcommand/plan.rs index 41c3796..2c4c8a5 100644 --- a/src/cli/subcommand/plan.rs +++ b/src/cli/subcommand/plan.rs @@ -9,11 +9,10 @@ use crate::cli::CommandExecute; /// Plan an install that can be repeated on an identical host later #[derive(Debug, Parser)] -#[command(args_conflicts_with_subcommands = true, arg_required_else_help = true)] pub struct Plan { #[clap(subcommand)] pub planner: Option, - #[clap(env = "HARMONIC_PLAN")] + #[clap(env = "HARMONIC_PLAN", default_value = "/dev/stdout")] pub output: PathBuf, } From a77cfc6d0cd1179f1986e83cbede634c73af2f12 Mon Sep 17 00:00:00 2001 From: Ana Hobden Date: Thu, 10 Nov 2022 08:36:07 -0800 Subject: [PATCH 2/2] Include bare harmonic install command --- src/cli/subcommand/install.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/cli/subcommand/install.rs b/src/cli/subcommand/install.rs index bcf0418..ef8389b 100644 --- a/src/cli/subcommand/install.rs +++ b/src/cli/subcommand/install.rs @@ -10,8 +10,10 @@ use eyre::{eyre, WrapErr}; use crate::{cli::CommandExecute, interaction}; /// Execute an install (possibly using an existing plan) +/// +/// To pass custom options, select a planner, for example `harmonic install linux-multi --help` #[derive(Debug, Parser)] -#[command(args_conflicts_with_subcommands = true, arg_required_else_help = true)] +#[command(args_conflicts_with_subcommands = true)] pub struct Install { #[clap( long,