From 13981a2e1d31d87151d960c2282f5d906817af6b Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 15 Dec 2023 00:05:14 +0100 Subject: [PATCH 1/3] rename plain to table --- rust/stackablectl/src/cli/mod.rs | 4 ++-- rust/stackablectl/src/cmds/demo.rs | 4 ++-- rust/stackablectl/src/cmds/operator.rs | 6 +++--- rust/stackablectl/src/cmds/release.rs | 4 ++-- rust/stackablectl/src/cmds/stack.rs | 4 ++-- rust/stackablectl/src/cmds/stacklet.rs | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rust/stackablectl/src/cli/mod.rs b/rust/stackablectl/src/cli/mod.rs index 8bc57f2e..9e6a9caf 100644 --- a/rust/stackablectl/src/cli/mod.rs +++ b/rust/stackablectl/src/cli/mod.rs @@ -244,9 +244,9 @@ CRDs." #[derive(Clone, Debug, Default, ValueEnum)] pub enum OutputType { - /// Print output formatted as plain text + /// Print output formatted as a table #[default] - Plain, + Table, /// Print output formatted as JSON Json, diff --git a/rust/stackablectl/src/cmds/demo.rs b/rust/stackablectl/src/cmds/demo.rs index 9e02e3b3..22eb450d 100644 --- a/rust/stackablectl/src/cmds/demo.rs +++ b/rust/stackablectl/src/cmds/demo.rs @@ -167,7 +167,7 @@ async fn list_cmd(args: &DemoListArgs, cli: &Cli, list: demo::List) -> Result { + OutputType::Table => { let mut table = Table::new(); table @@ -219,7 +219,7 @@ async fn describe_cmd( })?; match args.output_type { - OutputType::Plain => { + OutputType::Table => { let mut table = Table::new(); table .load_preset(NOTHING) diff --git a/rust/stackablectl/src/cmds/operator.rs b/rust/stackablectl/src/cmds/operator.rs index 5d9ea575..d3ddf19b 100644 --- a/rust/stackablectl/src/cmds/operator.rs +++ b/rust/stackablectl/src/cmds/operator.rs @@ -175,7 +175,7 @@ async fn list_cmd(args: &OperatorListArgs, cli: &Cli) -> Result { + OutputType::Table => { let mut table = Table::new(); table @@ -226,7 +226,7 @@ async fn describe_cmd(args: &OperatorDescribeArgs, cli: &Cli) -> Result { + OutputType::Table => { let stable_versions_string = match versions_list.0.get(HELM_REPO_NAME_STABLE) { Some(v) => v.join(", "), None => "".into(), @@ -359,7 +359,7 @@ fn installed_cmd(args: &OperatorInstalledArgs, cli: &Cli) -> Result { + OutputType::Table => { if installed.is_empty() { return Ok("No installed operators".into()); } diff --git a/rust/stackablectl/src/cmds/release.rs b/rust/stackablectl/src/cmds/release.rs index 2c62bfa2..a6935ac2 100644 --- a/rust/stackablectl/src/cmds/release.rs +++ b/rust/stackablectl/src/cmds/release.rs @@ -154,7 +154,7 @@ async fn list_cmd( info!("Listing releases"); match args.output_type { - OutputType::Plain => { + OutputType::Table => { if release_list.inner().is_empty() { return Ok("No releases".into()); } @@ -207,7 +207,7 @@ async fn describe_cmd( match release { Some(release) => match args.output_type { - OutputType::Plain => { + OutputType::Table => { let mut product_table = Table::new(); product_table diff --git a/rust/stackablectl/src/cmds/stack.rs b/rust/stackablectl/src/cmds/stack.rs index ee59b852..39017084 100644 --- a/rust/stackablectl/src/cmds/stack.rs +++ b/rust/stackablectl/src/cmds/stack.rs @@ -150,7 +150,7 @@ fn list_cmd(args: &StackListArgs, cli: &Cli, stack_list: stack::List) -> Result< info!("Listing stacks"); match args.output_type { - OutputType::Plain => { + OutputType::Table => { let mut table = Table::new(); table @@ -197,7 +197,7 @@ fn describe_cmd( match stack_list.get(&args.stack_name) { Some(stack) => match args.output_type { - OutputType::Plain => { + OutputType::Table => { let mut table = Table::new(); let mut parameter_table = Table::new(); diff --git a/rust/stackablectl/src/cmds/stacklet.rs b/rust/stackablectl/src/cmds/stacklet.rs index 7f71ec97..feb76b26 100644 --- a/rust/stackablectl/src/cmds/stacklet.rs +++ b/rust/stackablectl/src/cmds/stacklet.rs @@ -116,7 +116,7 @@ async fn list_cmd(args: &StackletListArgs, cli: &Cli) -> Result { + OutputType::Table => { // The main table displays all installed (and discovered) stacklets // and their condition. let mut table = Table::new(); From f07c12e3b07b8998298897ad8e6a7de25d84cd1d Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 15 Dec 2023 13:02:57 +0100 Subject: [PATCH 2/3] handle plain table output (disable arrangement, and don't use table border symbols). Rearrange some lines of code to be consistent --- rust/stackablectl/src/cli/mod.rs | 3 +++ rust/stackablectl/src/cmds/demo.rs | 13 ++++++++---- rust/stackablectl/src/cmds/operator.rs | 26 ++++++++++++++++-------- rust/stackablectl/src/cmds/release.rs | 15 +++++++++----- rust/stackablectl/src/cmds/stack.rs | 13 ++++++++---- rust/stackablectl/src/cmds/stacklet.rs | 28 +++++++++++++++++--------- 6 files changed, 67 insertions(+), 31 deletions(-) diff --git a/rust/stackablectl/src/cli/mod.rs b/rust/stackablectl/src/cli/mod.rs index 9e6a9caf..bf3a50a5 100644 --- a/rust/stackablectl/src/cli/mod.rs +++ b/rust/stackablectl/src/cli/mod.rs @@ -244,6 +244,9 @@ CRDs." #[derive(Clone, Debug, Default, ValueEnum)] pub enum OutputType { + /// Print output formatted as plain text + Plain, + /// Print output formatted as a table #[default] Table, diff --git a/rust/stackablectl/src/cmds/demo.rs b/rust/stackablectl/src/cmds/demo.rs index 22eb450d..a83b133d 100644 --- a/rust/stackablectl/src/cmds/demo.rs +++ b/rust/stackablectl/src/cmds/demo.rs @@ -167,13 +167,17 @@ async fn list_cmd(args: &DemoListArgs, cli: &Cli, list: demo::List) -> Result { - let mut table = Table::new(); + OutputType::Plain | OutputType::Table => { + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) .set_header(vec!["#", "NAME", "STACK", "DESCRIPTION"]) - .load_preset(UTF8_FULL); + .set_content_arrangement(arrangement) + .load_preset(preset); for (index, (demo_name, demo_spec)) in list.inner().iter().enumerate() { let row = Row::from(vec![ @@ -219,6 +223,7 @@ async fn describe_cmd( })?; match args.output_type { + OutputType::Plain => todo!(), OutputType::Table => { let mut table = Table::new(); table diff --git a/rust/stackablectl/src/cmds/operator.rs b/rust/stackablectl/src/cmds/operator.rs index d3ddf19b..7396cb79 100644 --- a/rust/stackablectl/src/cmds/operator.rs +++ b/rust/stackablectl/src/cmds/operator.rs @@ -175,13 +175,17 @@ async fn list_cmd(args: &OperatorListArgs, cli: &Cli) -> Result { - let mut table = Table::new(); + OutputType::Plain | OutputType::Table => { + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) .set_header(vec!["#", "OPERATOR", "STABLE VERSIONS"]) - .load_preset(UTF8_FULL); + .set_content_arrangement(arrangement) + .load_preset(preset); for (index, (operator_name, versions)) in versions_list.iter().enumerate() { let versions_string = match versions.0.get(HELM_REPO_NAME_STABLE) { @@ -226,6 +230,7 @@ async fn describe_cmd(args: &OperatorDescribeArgs, cli: &Cli) -> Result todo!(), OutputType::Table => { let stable_versions_string = match versions_list.0.get(HELM_REPO_NAME_STABLE) { Some(v) => v.join(", "), @@ -359,23 +364,28 @@ fn installed_cmd(args: &OperatorInstalledArgs, cli: &Cli) -> Result { + OutputType::Plain | OutputType::Table => { if installed.is_empty() { return Ok("No installed operators".into()); } + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) - .load_preset(UTF8_FULL) .set_header(vec![ "OPERATOR", "VERSION", "NAMESPACE", "STATUS", "LAST UPDATED", - ]); + ]) + .set_content_arrangement(arrangement) + .load_preset(preset); for (release_name, release) in installed { table.add_row(vec![ diff --git a/rust/stackablectl/src/cmds/release.rs b/rust/stackablectl/src/cmds/release.rs index a6935ac2..0a1242fa 100644 --- a/rust/stackablectl/src/cmds/release.rs +++ b/rust/stackablectl/src/cmds/release.rs @@ -154,17 +154,21 @@ async fn list_cmd( info!("Listing releases"); match args.output_type { - OutputType::Table => { + OutputType::Plain | OutputType::Table => { if release_list.inner().is_empty() { return Ok("No releases".into()); } - let mut table = Table::new(); + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) - .load_preset(UTF8_FULL) - .set_header(vec!["#", "RELEASE", "RELEASE DATE", "DESCRIPTION"]); + .set_header(vec!["#", "RELEASE", "RELEASE DATE", "DESCRIPTION"]) + .set_content_arrangement(arrangement) + .load_preset(preset); for (index, (release_name, release_spec)) in release_list.inner().iter().enumerate() { table.add_row(vec![ @@ -207,6 +211,7 @@ async fn describe_cmd( match release { Some(release) => match args.output_type { + OutputType::Plain => todo!(), OutputType::Table => { let mut product_table = Table::new(); diff --git a/rust/stackablectl/src/cmds/stack.rs b/rust/stackablectl/src/cmds/stack.rs index 39017084..bc7de68b 100644 --- a/rust/stackablectl/src/cmds/stack.rs +++ b/rust/stackablectl/src/cmds/stack.rs @@ -150,13 +150,17 @@ fn list_cmd(args: &StackListArgs, cli: &Cli, stack_list: stack::List) -> Result< info!("Listing stacks"); match args.output_type { - OutputType::Table => { - let mut table = Table::new(); + OutputType::Plain | OutputType::Table => { + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) .set_header(vec!["#", "STACK", "RELEASE", "DESCRIPTION"]) - .load_preset(UTF8_FULL); + .set_content_arrangement(arrangement) + .load_preset(preset); for (index, (stack_name, stack)) in stack_list.inner().iter().enumerate() { table.add_row(vec![ @@ -197,6 +201,7 @@ fn describe_cmd( match stack_list.get(&args.stack_name) { Some(stack) => match args.output_type { + OutputType::Plain => todo!(), OutputType::Table => { let mut table = Table::new(); diff --git a/rust/stackablectl/src/cmds/stacklet.rs b/rust/stackablectl/src/cmds/stacklet.rs index feb76b26..0312dbc7 100644 --- a/rust/stackablectl/src/cmds/stacklet.rs +++ b/rust/stackablectl/src/cmds/stacklet.rs @@ -116,7 +116,12 @@ async fn list_cmd(args: &StackletListArgs, cli: &Cli) -> Result { + OutputType::Plain | OutputType::Table => { + let (arrangement, preset) = match args.output_type { + OutputType::Plain => (ContentArrangement::Disabled, NOTHING), + _ => (ContentArrangement::Dynamic, UTF8_FULL), + }; + // The main table displays all installed (and discovered) stacklets // and their condition. let mut table = Table::new(); @@ -128,18 +133,21 @@ async fn list_cmd(args: &StackletListArgs, cli: &Cli) -> Result 0, + _ => stacklets + .iter() + .flat_map(|s| &s.endpoints) + .map(|(endpoint_name, _)| endpoint_name.len()) + .max() + .unwrap_or_default(), + }; for stacklet in stacklets { let ConditionOutput { summary, errors } = @@ -149,7 +157,7 @@ async fn list_cmd(args: &StackletListArgs, cli: &Cli) -> Result>() .join("\n"); From 569d1d7810a3b79ab90cae42c26308afc4c227c5 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 15 Dec 2023 13:48:51 +0100 Subject: [PATCH 3/3] configue plain output for `describe` commands. These already have borders disabled --- rust/stackablectl/src/cmds/demo.rs | 10 +++++++--- rust/stackablectl/src/cmds/operator.rs | 10 +++++++--- rust/stackablectl/src/cmds/release.rs | 14 +++++++++----- rust/stackablectl/src/cmds/stack.rs | 12 ++++++++---- 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/rust/stackablectl/src/cmds/demo.rs b/rust/stackablectl/src/cmds/demo.rs index a83b133d..d71b29a4 100644 --- a/rust/stackablectl/src/cmds/demo.rs +++ b/rust/stackablectl/src/cmds/demo.rs @@ -223,12 +223,16 @@ async fn describe_cmd( })?; match args.output_type { - OutputType::Plain => todo!(), - OutputType::Table => { + OutputType::Plain | OutputType::Table => { + let arrangement = match args.output_type { + OutputType::Plain => ContentArrangement::Disabled, + _ => ContentArrangement::Dynamic, + }; + let mut table = Table::new(); table + .set_content_arrangement(arrangement) .load_preset(NOTHING) - .set_content_arrangement(ContentArrangement::Dynamic) .add_row(vec!["DEMO", &args.demo_name]) .add_row(vec!["DESCRIPTION", &demo.description]) .add_row_if( diff --git a/rust/stackablectl/src/cmds/operator.rs b/rust/stackablectl/src/cmds/operator.rs index 7396cb79..2777385e 100644 --- a/rust/stackablectl/src/cmds/operator.rs +++ b/rust/stackablectl/src/cmds/operator.rs @@ -230,8 +230,12 @@ async fn describe_cmd(args: &OperatorDescribeArgs, cli: &Cli) -> Result todo!(), - OutputType::Table => { + OutputType::Plain | OutputType::Table => { + let arrangement = match args.output_type { + OutputType::Plain => ContentArrangement::Disabled, + _ => ContentArrangement::Dynamic, + }; + let stable_versions_string = match versions_list.0.get(HELM_REPO_NAME_STABLE) { Some(v) => v.join(", "), None => "".into(), @@ -249,7 +253,7 @@ async fn describe_cmd(args: &OperatorDescribeArgs, cli: &Cli) -> Result match args.output_type { - OutputType::Plain => todo!(), - OutputType::Table => { + OutputType::Plain | OutputType::Table => { + let arrangement = match args.output_type { + OutputType::Plain => ContentArrangement::Disabled, + _ => ContentArrangement::Dynamic, + }; + let mut product_table = Table::new(); product_table + .set_header(vec!["PRODUCT", "OPERATOR VERSION"]) .set_content_arrangement(ContentArrangement::Dynamic) - .load_preset(NOTHING) - .set_header(vec!["PRODUCT", "OPERATOR VERSION"]); + .load_preset(NOTHING); for (product_name, product) in &release.products { product_table.add_row(vec![product_name, &product.version.to_string()]); @@ -227,7 +231,7 @@ async fn describe_cmd( let mut table = Table::new(); table - .set_content_arrangement(ContentArrangement::Dynamic) + .set_content_arrangement(arrangement) .load_preset(NOTHING) .add_row(vec!["RELEASE", &args.release]) .add_row(vec!["RELEASE DATE", release.date.as_str()]) diff --git a/rust/stackablectl/src/cmds/stack.rs b/rust/stackablectl/src/cmds/stack.rs index bc7de68b..fe315238 100644 --- a/rust/stackablectl/src/cmds/stack.rs +++ b/rust/stackablectl/src/cmds/stack.rs @@ -201,15 +201,19 @@ fn describe_cmd( match stack_list.get(&args.stack_name) { Some(stack) => match args.output_type { - OutputType::Plain => todo!(), - OutputType::Table => { + OutputType::Plain | OutputType::Table => { + let arrangement = match args.output_type { + OutputType::Plain => ContentArrangement::Disabled, + _ => ContentArrangement::Dynamic, + }; + let mut table = Table::new(); let mut parameter_table = Table::new(); parameter_table .set_header(vec!["NAME", "DESCRIPTION", "DEFAULT VALUE"]) - .set_content_arrangement(ContentArrangement::Dynamic) + .set_content_arrangement(arrangement.clone()) .load_preset(NOTHING); for parameter in &stack.parameters { @@ -221,7 +225,7 @@ fn describe_cmd( } table - .set_content_arrangement(ContentArrangement::Dynamic) + .set_content_arrangement(arrangement) .load_preset(NOTHING) .add_row(vec!["STACK", args.stack_name.as_str()]) .add_row(vec!["DESCRIPTION", stack.description.as_str()])