From b3fe448ff1218e8afcdebeb1262e8105fee04b4c Mon Sep 17 00:00:00 2001 From: RoyUP9 <87927115+RoyUP9@users.noreply.github.com> Date: Thu, 26 Aug 2021 13:50:41 +0300 Subject: [PATCH] added custom config path option (#247) --- cli/cmd/config.go | 10 +++++----- cli/cmd/root.go | 5 +++++ cli/config/config.go | 26 ++++++++++++++------------ cli/config/configStruct.go | 4 ++++ cli/config/config_test.go | 4 +++- cli/mizu/fsUtils/mizuLogsUtils.go | 4 ++-- 6 files changed, 33 insertions(+), 20 deletions(-) diff --git a/cli/cmd/config.go b/cli/cmd/config.go index 2b30a9630..0a7815d9a 100644 --- a/cli/cmd/config.go +++ b/cli/cmd/config.go @@ -25,11 +25,11 @@ var configCmd = &cobra.Command{ } if config.Config.Config.Regenerate { data := []byte(template) - if err := ioutil.WriteFile(config.GetConfigFilePath(), data, 0644); err != nil { + if err := ioutil.WriteFile(config.Config.ConfigFilePath, data, 0644); err != nil { logger.Log.Errorf("Failed writing config %v", err) return nil } - logger.Log.Infof(fmt.Sprintf("Template File written to %s", fmt.Sprintf(uiUtils.Purple, config.GetConfigFilePath()))) + logger.Log.Infof(fmt.Sprintf("Template File written to %s", fmt.Sprintf(uiUtils.Purple, config.Config.ConfigFilePath))) } else { logger.Log.Debugf("Writing template config.\n%v", template) fmt.Printf("%v", template) @@ -41,8 +41,8 @@ var configCmd = &cobra.Command{ func init() { rootCmd.AddCommand(configCmd) - defaultConfigConfig := configStructs.ConfigConfig{} - defaults.Set(&defaultConfigConfig) + defaultConfig := config.ConfigStruct{} + defaults.Set(&defaultConfig) - configCmd.Flags().BoolP(configStructs.RegenerateConfigName, "r", defaultConfigConfig.Regenerate, fmt.Sprintf("Regenerate the config file with default values %s", config.GetConfigFilePath())) + configCmd.Flags().BoolP(configStructs.RegenerateConfigName, "r", defaultConfig.Config.Regenerate, fmt.Sprintf("Regenerate the config file with default values to path %s or to chosen path using --%s", defaultConfig.ConfigFilePath, config.ConfigFilePathCommandName)) } diff --git a/cli/cmd/root.go b/cli/cmd/root.go index 3a1f4d3e0..d14c54acf 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -2,6 +2,7 @@ package cmd import ( "fmt" + "github.com/creasty/defaults" "github.com/spf13/cobra" "github.com/up9inc/mizu/cli/config" "github.com/up9inc/mizu/cli/logger" @@ -25,7 +26,11 @@ Further info is available at https://github.com/up9inc/mizu`, } func init() { + defaultConfig := config.ConfigStruct{} + defaults.Set(&defaultConfig) + rootCmd.PersistentFlags().StringSlice(config.SetCommandName, []string{}, fmt.Sprintf("Override values using --%s", config.SetCommandName)) + rootCmd.PersistentFlags().String(config.ConfigFilePathCommandName, defaultConfig.ConfigFilePath, fmt.Sprintf("Override config file path using --%s", config.ConfigFilePathCommandName)) } func printNewVersionIfNeeded(versionChan chan string) { diff --git a/cli/config/config.go b/cli/config/config.go index e1f66c036..ab6332b51 100644 --- a/cli/config/config.go +++ b/cli/config/config.go @@ -7,7 +7,6 @@ import ( "github.com/up9inc/mizu/cli/mizu" "io/ioutil" "os" - "path" "reflect" "strconv" "strings" @@ -27,7 +26,7 @@ const ( ) var ( - Config = ConfigStruct{} + Config = ConfigStruct{} cmdName string ) @@ -38,9 +37,11 @@ func InitConfig(cmd *cobra.Command) error { return err } - if err := mergeConfigFile(); err != nil { - return fmt.Errorf("invalid config, %w\n" + - "you can regenerate the file by removing it (%v) and using `mizu config -r`", err, GetConfigFilePath()) + configFilePath := cmd.Flags().Lookup(ConfigFilePathCommandName).Value.String() + + if err := mergeConfigFile(configFilePath); err != nil { + return fmt.Errorf("invalid config, %w\n"+ + "you can regenerate the file by removing it (%v) and using `mizu config -r`", err, configFilePath) } cmd.Flags().Visit(initFlag) @@ -63,12 +64,8 @@ func GetConfigWithDefaults() (string, error) { return uiUtils.PrettyYaml(defaultConf) } -func GetConfigFilePath() string { - return path.Join(mizu.GetMizuFolderPath(), "config.yaml") -} - -func mergeConfigFile() error { - reader, openErr := os.Open(GetConfigFilePath()) +func mergeConfigFile(configFilePath string) error { + reader, openErr := os.Open(configFilePath) if openErr != nil { return nil } @@ -89,7 +86,12 @@ func mergeConfigFile() error { func initFlag(f *pflag.Flag) { configElemValue := reflect.ValueOf(&Config).Elem() - flagPath := []string {cmdName, f.Name} + var flagPath []string + if mizu.Contains([]string{ConfigFilePathCommandName}, f.Name) { + flagPath = []string{f.Name} + } else { + flagPath = []string{cmdName, f.Name} + } sliceValue, isSliceValue := f.Value.(pflag.SliceValue) if !isSliceValue { diff --git a/cli/config/configStruct.go b/cli/config/configStruct.go index aa4de7944..bf3472adc 100644 --- a/cli/config/configStruct.go +++ b/cli/config/configStruct.go @@ -7,11 +7,13 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/client-go/util/homedir" "os" + "path" "path/filepath" ) const ( MizuResourcesNamespaceConfigName = "mizu-resources-namespace" + ConfigFilePathCommandName = "config-path" ) type ConfigStruct struct { @@ -27,10 +29,12 @@ type ConfigStruct struct { Telemetry bool `yaml:"telemetry" default:"true"` DumpLogs bool `yaml:"dump-logs" default:"false"` KubeConfigPathStr string `yaml:"kube-config-path"` + ConfigFilePath string `yaml:"config-path,omitempty" readonly:""` } func (config *ConfigStruct) SetDefaults() { config.AgentImage = fmt.Sprintf("gcr.io/up9-docker-hub/mizu/%s:%s", mizu.Branch, mizu.SemVer) + config.ConfigFilePath = path.Join(mizu.GetMizuFolderPath(), "config.yaml") } func (config *ConfigStruct) ImagePullPolicy() v1.PullPolicy { diff --git a/cli/config/config_test.go b/cli/config/config_test.go index d5028cd94..7f0751f0c 100644 --- a/cli/config/config_test.go +++ b/cli/config/config_test.go @@ -1,6 +1,7 @@ package config_test import ( + "fmt" "github.com/up9inc/mizu/cli/config" "reflect" "strings" @@ -16,7 +17,8 @@ func TestConfigWriteIgnoresReadonlyFields(t *testing.T) { configWithDefaults, _ := config.GetConfigWithDefaults() for _, readonlyField := range readonlyFields { t.Run(readonlyField, func(t *testing.T) { - if strings.Contains(configWithDefaults, readonlyField) { + readonlyFieldToCheck := fmt.Sprintf("\n%s:", readonlyField) + if strings.Contains(configWithDefaults, readonlyFieldToCheck) { t.Errorf("unexpected result - readonly field: %v, config: %v", readonlyField, configWithDefaults) } }) diff --git a/cli/mizu/fsUtils/mizuLogsUtils.go b/cli/mizu/fsUtils/mizuLogsUtils.go index 5edb5d41b..8cfc9524d 100644 --- a/cli/mizu/fsUtils/mizuLogsUtils.go +++ b/cli/mizu/fsUtils/mizuLogsUtils.go @@ -45,10 +45,10 @@ func DumpLogs(provider *kubernetes.Provider, ctx context.Context, filePath strin logger.Log.Debugf("Successfully added log length %d from pod: %s.%s", len(logs), pod.Namespace, pod.Name) } } - if err := AddFileToZip(zipWriter, config.GetConfigFilePath()); err != nil { + if err := AddFileToZip(zipWriter, config.Config.ConfigFilePath); err != nil { logger.Log.Debugf("Failed write file, %v", err) } else { - logger.Log.Debugf("Successfully added file %s", config.GetConfigFilePath()) + logger.Log.Debugf("Successfully added file %s", config.Config.ConfigFilePath) } if err := AddFileToZip(zipWriter, logger.GetLogFilePath()); err != nil { logger.Log.Debugf("Failed write file, %v", err)