diff --git a/CHANGELOG.md b/CHANGELOG.md index e242c3d..5090231 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added - `config` command to get and set configuration options. - - `-l, --list` flag to list all available configuration keys. +- `config list|ls` command to list configuration options. - `endpoint list|ls` command to print the endpoints list as a table. - `--format` flag to format output using a Go template. - `stack list|ls` command to print the stacks list as a table. diff --git a/Dockerfile b/Dockerfile index 482c53c..6cee044 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,6 @@ FROM alpine ENV PSU_AUTHENTICATION_PASSWORD="" \ PSU_AUTHENTICATION_USER="" \ PSU_CONFIG="" \ - PSU_CONFIG_LIST="" \ PSU_CONNECTION_INSECURE="" \ PSU_CONNECTION_TIMEOUT="" \ PSU_CONNECTION_URL="" \ diff --git a/cmd/config.go b/cmd/config.go index 5dd58e4..1a089d3 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -8,7 +8,6 @@ import ( "github.com/spf13/viper" "log" "os" - "sort" ) // configCmd represents the config command @@ -16,75 +15,63 @@ var configCmd = &cobra.Command{ Use: "config KEY [VALUE]", Short: "Get and set configuration options", Example: "psu config user admin", + Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { - if viper.GetBool("config.list") { - // List config keys - keys := viper.AllKeys() - sort.Slice(keys, func(i, j int) bool { - return keys[i] < keys[j] - }) - for _, key := range keys { - fmt.Println(key) + // Check if it's a valid key + var keyExists bool + for _, key := range viper.AllKeys() { + if key == args[0] { + keyExists = true + break } + } + if !keyExists { + log.Fatalf("Unkonwn configuration key \"%s\"", args[0]) + } + + // Create new viper + commandViper := viper.New() + + // Set config file name + var configFile string + if viper.ConfigFileUsed() != "" { + // Use config file from viper + configFile = viper.ConfigFileUsed() } else { - if len(args) >= 1 { - // Check if it's a valid key - var keyExists bool - for _, key := range viper.AllKeys() { - if key == args[0] { - keyExists = true - break - } - } - if !keyExists { - log.Fatalf("Unkonwn configuration key \"%s\"", args[0]) - } + // Find home directory + home, err := homedir.Dir() + if err != nil { + fmt.Println(err) + os.Exit(1) + } - // Create new viper - commandViper := viper.New() + // Use $HOME/.psu.yaml + configFile = fmt.Sprintf("%s%s.psu.yaml", home, string(os.PathSeparator)) + } + commandViper.SetConfigFile(configFile) - // Set config file name - var configFile string - if viper.ConfigFileUsed() != "" { - // Use config file from viper - configFile = viper.ConfigFileUsed() - } else { - // Find home directory - home, err := homedir.Dir() - if err != nil { - fmt.Println(err) - os.Exit(1) - } + // Read config from file + if configReadingErr := commandViper.ReadInConfig(); configReadingErr != nil { + common.PrintVerbose(fmt.Sprintf("Could not read configuration from \"%s\". Expect all configuration values to be unset.", configFile)) + } - // Use $HOME/.psu.yaml - configFile = fmt.Sprintf("%s%s.psu.yaml", home, string(os.PathSeparator)) - } - commandViper.SetConfigFile(configFile) + if len(args) == 1 { + // Get config + fmt.Println(commandViper.Get(args[0])) + } else { + // Set config + commandViper.Set(args[0], args[1]) - // Read config from file - if configReadingErr := commandViper.ReadInConfig(); configReadingErr != nil { - common.PrintVerbose(fmt.Sprintf("Could not read configuration from \"%s\". Expect all configuration values to be unset.", configFile)) - } + // Make sure the config file exists + _, fileCreationErr := os.Create(configFile) + if fileCreationErr != nil { + common.CheckError(fileCreationErr) + } - if len(args) == 1 { - // Get config - fmt.Println(commandViper.Get(args[0])) - } else { - // Set config - commandViper.Set(args[0], args[1]) - - // Make sure the config file exists - _, fileCreationErr := os.Create(configFile) - if fileCreationErr != nil { - common.CheckError(fileCreationErr) - } - - // Write te config file - configWritingErr := commandViper.WriteConfig() - if configWritingErr != nil { - common.CheckError(configWritingErr) - } - } + // Write te config file + configWritingErr := commandViper.WriteConfig() + if configWritingErr != nil { + common.CheckError(configWritingErr) } } }, @@ -92,7 +79,4 @@ var configCmd = &cobra.Command{ func init() { rootCmd.AddCommand(configCmd) - - configCmd.Flags().BoolP("list", "l", false, "list all config keys") - viper.BindPFlag("config.list", configCmd.Flags().Lookup("list")) } diff --git a/cmd/configList.go b/cmd/configList.go new file mode 100644 index 0000000..08bef2e --- /dev/null +++ b/cmd/configList.go @@ -0,0 +1,32 @@ +package cmd + +import ( + "fmt" + "github.com/spf13/viper" + "sort" + + "github.com/spf13/cobra" +) + +// configListCmd represents the list command +var configListCmd = &cobra.Command{ + Use: "list", + Short: "List configs", + Aliases: []string{"ls"}, + Run: func(cmd *cobra.Command, args []string) { + // Get alphabetically ordered list of config keys + keys := viper.AllKeys() + sort.Slice(keys, func(i, j int) bool { + return keys[i] < keys[j] + }) + + // List keys and values + for _, key := range keys { + fmt.Printf("%s: %v\n", key, viper.Get(key)) + } + }, +} + +func init() { + configCmd.AddCommand(configListCmd) +}