From 5ccbdc43d37fe0d43569c44ed3f28af1c93dd9e3 Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 17 Oct 2024 18:24:13 +0100 Subject: [PATCH 1/4] Add description to `config list-profiles` --- .../commands/config/list_profiles_internal.go | 19 ++++++++++++++++++- internal/output/output.go | 7 ++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/internal/commands/config/list_profiles_internal.go b/internal/commands/config/list_profiles_internal.go index 2b56a152..be21734b 100644 --- a/internal/commands/config/list_profiles_internal.go +++ b/internal/commands/config/list_profiles_internal.go @@ -1,6 +1,9 @@ package config_internal import ( + "slices" + + "github.com/fatih/color" "github.com/pingidentity/pingcli/internal/output" "github.com/pingidentity/pingcli/internal/profiles" ) @@ -10,12 +13,26 @@ func RunInternalConfigListProfiles() { activeProfile := profiles.GetMainConfig().ActiveProfile().Name() listStr := "Profiles:\n" + + slices.Sort(profileNames) + + output.SetColorize() + + activeFmt := color.New(color.Bold, color.FgGreen).SprintFunc() + for _, profileName := range profileNames { if profileName == activeProfile { - listStr += "- " + profileName + " (active)\n" + listStr += "- " + profileName + activeFmt(" (active)") + " \n" } else { listStr += "- " + profileName + "\n" } + + description, err := profiles.GetMainConfig().ProfileViperValue(profileName, "description") + if err != nil { + continue + } + + listStr += " " + description + "\n" } output.Print(output.Opts{ diff --git a/internal/output/output.go b/internal/output/output.go index 607258fb..f45a96a3 100644 --- a/internal/output/output.go +++ b/internal/output/output.go @@ -39,7 +39,7 @@ const ( ENUM_RESULT_FAILURE Result = "Failure" ) -func Print(output Opts) { +func SetColorize() { colorizeOutput, err := profiles.GetOptionValue(options.RootColorOption) if err != nil { color.NoColor = false @@ -51,6 +51,11 @@ func Print(output Opts) { color.NoColor = !colorizeOutputBool } } +} + +func Print(output Opts) { + + SetColorize() outputFormat, err := profiles.GetOptionValue(options.RootOutputFormatOption) if err != nil { From be579ac75aa040b57a5a4314ec78759c964e19bb Mon Sep 17 00:00:00 2001 From: Patrick Cowland Date: Thu, 17 Oct 2024 18:29:32 +0100 Subject: [PATCH 2/4] add error and blank description handling --- internal/commands/config/list_profiles_internal.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/commands/config/list_profiles_internal.go b/internal/commands/config/list_profiles_internal.go index be21734b..c9bd8a91 100644 --- a/internal/commands/config/list_profiles_internal.go +++ b/internal/commands/config/list_profiles_internal.go @@ -4,11 +4,14 @@ import ( "slices" "github.com/fatih/color" + "github.com/pingidentity/pingcli/internal/logger" "github.com/pingidentity/pingcli/internal/output" "github.com/pingidentity/pingcli/internal/profiles" ) func RunInternalConfigListProfiles() { + l := logger.Get() + profileNames := profiles.GetMainConfig().ProfileNames() activeProfile := profiles.GetMainConfig().ActiveProfile().Name() @@ -29,10 +32,13 @@ func RunInternalConfigListProfiles() { description, err := profiles.GetMainConfig().ProfileViperValue(profileName, "description") if err != nil { + l.Warn().Msgf("Cannot retrieve profile description for profile %s: %s.", profileName, err) continue } - listStr += " " + description + "\n" + if description != "" { + listStr += " " + description + "\n" + } } output.Print(output.Opts{ From 3859a8eaeace41778243117e84f7fbd10018baa9 Mon Sep 17 00:00:00 2001 From: Erik Ostien Date: Fri, 18 Oct 2024 15:48:25 +0200 Subject: [PATCH 3/4] Update profiles.GetMainConfig().ProfileNames() to return a sorted list. --- internal/commands/config/list_profiles_internal.go | 6 +----- internal/profiles/viper.go | 2 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/internal/commands/config/list_profiles_internal.go b/internal/commands/config/list_profiles_internal.go index c9bd8a91..74c7f1cd 100644 --- a/internal/commands/config/list_profiles_internal.go +++ b/internal/commands/config/list_profiles_internal.go @@ -1,8 +1,6 @@ package config_internal import ( - "slices" - "github.com/fatih/color" "github.com/pingidentity/pingcli/internal/logger" "github.com/pingidentity/pingcli/internal/output" @@ -17,10 +15,8 @@ func RunInternalConfigListProfiles() { listStr := "Profiles:\n" - slices.Sort(profileNames) - + // We need to enable/disable colorize before applying the color to the string below. output.SetColorize() - activeFmt := color.New(color.Bold, color.FgGreen).SprintFunc() for _, profileName := range profileNames { diff --git a/internal/profiles/viper.go b/internal/profiles/viper.go index 34aa8846..78b0b903 100644 --- a/internal/profiles/viper.go +++ b/internal/profiles/viper.go @@ -180,6 +180,8 @@ func (m MainConfig) ProfileNames() (profileNames []string) { } } + slices.Sort(profileNames) + return profileNames } From 9fdbcca0dd7749995fc878bdc28ea1668a7598d8 Mon Sep 17 00:00:00 2001 From: Erik Ostien Date: Fri, 18 Oct 2024 15:50:31 +0200 Subject: [PATCH 4/4] Add a comment and fix error output --- internal/commands/config/list_profiles_internal.go | 2 +- internal/profiles/viper.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/commands/config/list_profiles_internal.go b/internal/commands/config/list_profiles_internal.go index 74c7f1cd..a8aa8c01 100644 --- a/internal/commands/config/list_profiles_internal.go +++ b/internal/commands/config/list_profiles_internal.go @@ -28,7 +28,7 @@ func RunInternalConfigListProfiles() { description, err := profiles.GetMainConfig().ProfileViperValue(profileName, "description") if err != nil { - l.Warn().Msgf("Cannot retrieve profile description for profile %s: %s.", profileName, err) + l.Warn().Msgf("Cannot retrieve profile description for profile %s: %v", profileName, err) continue } diff --git a/internal/profiles/viper.go b/internal/profiles/viper.go index 78b0b903..064eebdc 100644 --- a/internal/profiles/viper.go +++ b/internal/profiles/viper.go @@ -164,6 +164,7 @@ func (m MainConfig) DeleteProfile(pName string) (err error) { } // Get all profile names from config.yaml configuration file +// Returns a sorted slice of profile names func (m MainConfig) ProfileNames() (profileNames []string) { keySet := make(map[string]struct{}) mainViperKeys := m.ViperInstance().AllKeys()