From b8e63190a469de0df5ec75d1ef1a7cce510bfb79 Mon Sep 17 00:00:00 2001 From: Daniel Hall Date: Fri, 24 Jul 2026 10:20:01 +1000 Subject: [PATCH 1/2] fix: simplify config get to read directly from viper Replace the heavyweight GetBackplaneConfiguration() call with direct viper reads from the config file, avoiding unnecessary OCM connection logic and proxy-testing side effects for a simple config display command. Signed-off-by: Daniel Hall Co-Authored-By: Claude Opus 4.6 --- cmd/ocm-backplane/config/get.go | 34 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/cmd/ocm-backplane/config/get.go b/cmd/ocm-backplane/config/get.go index 7aa94a42..b1276d03 100644 --- a/cmd/ocm-backplane/config/get.go +++ b/cmd/ocm-backplane/config/get.go @@ -2,8 +2,11 @@ package config import ( "fmt" + "os" + "strings" "github.com/spf13/cobra" + "github.com/spf13/viper" "github.com/openshift/backplane-cli/pkg/cli/config" ) @@ -21,33 +24,36 @@ func newGetCmd() *cobra.Command { } func getConfig(cmd *cobra.Command, args []string) error { - config, err := config.GetBackplaneConfiguration() + configPath, err := config.GetConfigFilePath() if err != nil { return err } - proxyURL := "" - if config.ProxyURL != nil { - proxyURL = *config.ProxyURL + if _, err = os.Stat(configPath); err == nil { + viper.SetConfigFile(configPath) + viper.SetConfigType("json") + if err := viper.ReadInConfig(); err != nil { + return err + } } switch args[0] { case URLConfigVar: - fmt.Printf("%s: %s\n", URLConfigVar, config.URL) + fmt.Printf("%s: %s\n", URLConfigVar, viper.GetString(URLConfigVar)) case ProxyURLConfigVar: - fmt.Printf("%s: %s\n", ProxyURLConfigVar, proxyURL) + fmt.Printf("%s: %s\n", ProxyURLConfigVar, strings.Join(viper.GetStringSlice(ProxyURLConfigVar), ", ")) case SessionConfigVar: - fmt.Printf("%s: %s\n", SessionConfigVar, config.SessionDirectory) + fmt.Printf("%s: %s\n", SessionConfigVar, viper.GetString(SessionConfigVar)) case PagerDutyAPIConfigVar: - fmt.Printf("%s: %s\n", PagerDutyAPIConfigVar, config.PagerDutyAPIKey) + fmt.Printf("%s: %s\n", PagerDutyAPIConfigVar, viper.GetString(PagerDutyAPIConfigVar)) case GovcloudVar: - fmt.Printf("%s: %t\n", GovcloudVar, config.Govcloud) + fmt.Printf("%s: %t\n", GovcloudVar, viper.GetBool(GovcloudVar)) case "all": - fmt.Printf("%s: %s\n", URLConfigVar, config.URL) - fmt.Printf("%s: %s\n", ProxyURLConfigVar, proxyURL) - fmt.Printf("%s: %s\n", SessionConfigVar, config.SessionDirectory) - fmt.Printf("%s: %s\n", PagerDutyAPIConfigVar, config.PagerDutyAPIKey) - fmt.Printf("%s: %t\n", GovcloudVar, config.Govcloud) + fmt.Printf("%s: %s\n", URLConfigVar, viper.GetString(URLConfigVar)) + fmt.Printf("%s: %s\n", ProxyURLConfigVar, strings.Join(viper.GetStringSlice(ProxyURLConfigVar), ", ")) + fmt.Printf("%s: %s\n", SessionConfigVar, viper.GetString(SessionConfigVar)) + fmt.Printf("%s: %s\n", PagerDutyAPIConfigVar, viper.GetString(PagerDutyAPIConfigVar)) + fmt.Printf("%s: %t\n", GovcloudVar, viper.GetBool(GovcloudVar)) default: return fmt.Errorf("supported config variables are %s, %s, %s, %s, & %s", URLConfigVar, ProxyURLConfigVar, SessionConfigVar, PagerDutyAPIConfigVar, GovcloudVar) } From 8814ed7b40251686847527c45ae480f8f73a75f7 Mon Sep 17 00:00:00 2001 From: Daniel Hall Date: Fri, 24 Jul 2026 10:27:54 +1000 Subject: [PATCH 2/2] fix: distinguish missing config file from other stat errors Return a user-contextual error for permission, invalid-path, and other filesystem failures instead of silently falling through to viper defaults. A missing file still falls through as before. Signed-off-by: Daniel Hall Co-Authored-By: Claude Opus 4.6 --- cmd/ocm-backplane/config/get.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmd/ocm-backplane/config/get.go b/cmd/ocm-backplane/config/get.go index b1276d03..8d996554 100644 --- a/cmd/ocm-backplane/config/get.go +++ b/cmd/ocm-backplane/config/get.go @@ -29,7 +29,11 @@ func getConfig(cmd *cobra.Command, args []string) error { return err } - if _, err = os.Stat(configPath); err == nil { + if _, err = os.Stat(configPath); err != nil { + if !os.IsNotExist(err) { + return fmt.Errorf("unable to access config file %s: %w", configPath, err) + } + } else { viper.SetConfigFile(configPath) viper.SetConfigType("json") if err := viper.ReadInConfig(); err != nil {