diff --git a/cmd/qliksense/context.go b/cmd/qliksense/context.go index e85ee67..7711f2f 100644 --- a/cmd/qliksense/context.go +++ b/cmd/qliksense/context.go @@ -64,6 +64,25 @@ qliksense config set = return cmd } +func unsetOtherConfigsCmd(q *qliksense.Qliksense) *cobra.Command { + var ( + cmd *cobra.Command + ) + + cmd = &cobra.Command{ + Use: "un-set", + Short: "remove a key value pair in the current context", + Example: ` +qliksense config unset + - The above configuration will be removed in the CR +`, + RunE: func(cmd *cobra.Command, args []string) error { + return q.UnsetOtherConfigs(args) + }, + } + return cmd +} + func setConfigsCmd(q *qliksense.Qliksense) *cobra.Command { var ( cmd *cobra.Command @@ -82,6 +101,24 @@ qliksense config set-configs .="" } return cmd } +func unsetConfigsCmd(q *qliksense.Qliksense) *cobra.Command { + var ( + cmd *cobra.Command + ) + + cmd = &cobra.Command{ + Use: "unset-configs", + Short: "unset configurations in the qliksense context as key-value pairs", + Example: ` +qliksense config unset-configs .="" + - The above configuration will be removed in the CR +`, + RunE: func(cmd *cobra.Command, args []string) error { + return q.UnsetConfigs(args) + }, + } + return cmd +} func setSecretsCmd(q *qliksense.Qliksense) *cobra.Command { var ( diff --git a/pkg/api/utils.go b/pkg/api/utils.go index 6afacae..00a7684 100644 --- a/pkg/api/utils.go +++ b/pkg/api/utils.go @@ -80,6 +80,31 @@ func ProcessConfigArgs(args []string) ([]*ServiceKeyValue, error) { return resultSvcKV, nil } +// ProcessUnsetConfigArgs processes args and returns an service, key, nil slice +func ProcessUnsetConfigArgs(args []string) ([]*ServiceKeyValue, error) { + if len(args) == 0 { + err := fmt.Errorf("No args were provided. Please provide args to configure the current context") + return nil, err + } + resultSvcKV := make([]*ServiceKeyValue, len(args)) + re1 := regexp.MustCompile(`(\w{1,}).(\w{1,})`) + for i, arg := range args { + LogDebugMessage("Arg received: %s", arg) + result := re1.FindStringSubmatch(arg) + // check if result array's length is == 3 (index 0 - is the full match & indices 1,2,- are the fields we need) + if len(result) != 3 { + err := fmt.Errorf("Please provide valid args for this command") + return nil, err + } + resultSvcKV[i] = &ServiceKeyValue{ + SvcName: result[1], + Key: result[2], + Value: "", + } + } + return resultSvcKV, nil +} + func ExecuteTaskWithBlinkingStdoutFeedback(task func() (interface{}, error), feedback string) (result interface{}, err error) { taskDone := make(chan bool) go func() { diff --git a/pkg/qliksense/context_configs.go b/pkg/qliksense/context_configs.go index 62e542d..f03e729 100644 --- a/pkg/qliksense/context_configs.go +++ b/pkg/qliksense/context_configs.go @@ -147,6 +147,27 @@ func (q *Qliksense) SetConfigs(args []string) error { return nil } +// SetConfigs - set-configs = commands +func (q *Qliksense) UnsetConfigs(args []string) error { + // retieve current context from config.yaml + qliksenseCR, qliksenseContextsFile, err := retrieveCurrentContextInfo(q) + if err != nil { + return err + } + + resultArgs, err := api.ProcessUnsetConfigArgs(args) + if err != nil { + return err + } + for _, ra := range resultArgs { + qliksenseCR.Spec.AddToConfigs(ra.SvcName, ra.Key, ra.Value) + } + // write modified content into context.yaml + api.WriteToFile(&qliksenseCR, qliksenseContextsFile) + + return nil +} + func retrieveCurrentContextInfo(q *Qliksense) (*api.QliksenseCR, string, error) { var qliksenseConfig api.QliksenseConfig qliksenseConfigFile := filepath.Join(q.QliksenseHome, QliksenseConfigFile) @@ -238,6 +259,49 @@ func (q *Qliksense) SetOtherConfigs(args []string) error { return nil } +// SetOtherConfigs - set profile/storageclassname/git.repository/manifestRoot commands +func (q *Qliksense) UnsetOtherConfigs(args []string) error { + // retieve current context from config.yaml + qliksenseCR, qliksenseContextsFile, err := retrieveCurrentContextInfo(q) + if err != nil { + return err + } + + // modify appropriate fields + if len(args) == 0 { + err := fmt.Errorf("No args were provided. Please provide args to configure the current context") + log.Println(err) + return err + } + + for _, arg := range args { + switch arg { + case "profile": + qliksenseCR.Spec.Profile = "" + api.LogDebugMessage("Current profile after modification: %s ", qliksenseCR.Spec.Profile) + case "git.repository": + qliksenseCR.Spec.Git.Repository = "" + api.LogDebugMessage("Current git repository after modification: %s ", qliksenseCR.Spec.Git.Repository) + case "storageClassName": + qliksenseCR.Spec.StorageClassName = "" + api.LogDebugMessage("Current StorageClassName after modification: %s ", qliksenseCR.Spec.StorageClassName) + case "manifestsRoot": + qliksenseCR.Spec.ManifestsRoot = "" + case "rotateKeys": + qliksenseCR.Spec.RotateKeys = "" + api.LogDebugMessage("Current rotateKeys after modification: %s ", qliksenseCR.Spec.RotateKeys) + default: + err := fmt.Errorf("Please enter one of: profile, storageClassName,rotateKeys, manifestRoot or git.repository arguments to configure the current context") + log.Println(err) + return err + } + } + // write modified content into context.yaml + api.WriteToFile(&qliksenseCR, qliksenseContextsFile) + + return nil +} + // SetContextConfig - set the context for qliksense kubernetes resources to live in func (q *Qliksense) SetContextConfig(args []string) error { if len(args) == 1 {