-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
98 lines (85 loc) · 2.64 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
Copyright © 2019 The Mosteroid Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"errors"
"fmt"
"io/ioutil"
"log"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
// configCmd represents the config command
var configCmd = &cobra.Command{
Use: "config",
Short: "Modify the configuration file",
Long: ``,
}
var setPropertyCmd = &cobra.Command{
Use: "set PROPERTY_NAME PROPERTY_VALUE",
Short: "Sets an individual value in the configuration file",
Long: `Sets an individual value in the configuration file
PROPERTY_NAME is a dot delimited name where each token represents either an attribute name or a map key. Map keys may not contain dots.
PROPERTY_VALUE is the new value you wish to set.
`,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 1 {
return errors.New("requires a PROPERTY_NAME argument")
}
if len(args) < 2 {
return errors.New("requires a PROPERTY_VALUE argument")
}
return nil
},
Run: func(cmd *cobra.Command, args []string) {
key := args[0]
value := args[1]
viper.Set(key, value)
viper.WriteConfig()
},
}
var unsetPropertyCmd = &cobra.Command{
Use: "unset PROPERTY_NAME",
Short: "Unsets an individual value in the configuration file",
Long: `Unsets an individual value in the configuration file
PROPERTY _NAME is a dot delimited name where each token represents either an attribute name or a map key. Map keys may not contain dots.`,
Args: func(cmd *cobra.Command, args []string) error {
if len(args) < 1 {
return errors.New("requires a PROPERTY_NAME argument")
}
return nil
},
Run: func(cmd *cobra.Command, args []string) {
key := args[0]
delete(viper.Get(key).(map[string]interface{}), "key")
viper.WriteConfig()
},
}
var viewConfigFileCmd = &cobra.Command{
Use: "view",
Short: "Display the .gitlabctl.yaml file.",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
file, err := ioutil.ReadFile(viper.ConfigFileUsed())
if err != nil {
log.Fatal(err)
}
fmt.Print(string(file))
},
}
func init() {
rootCmd.AddCommand(configCmd)
configCmd.AddCommand(setPropertyCmd)
configCmd.AddCommand(unsetPropertyCmd)
configCmd.AddCommand(viewConfigFileCmd)
}