-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
114 lines (79 loc) · 1.65 KB
/
main.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package main
import (
"os"
"fmt"
"strings"
"github.com/spf13/viper"
)
func printUsage() {
fmt.Println(
`
Usage:
yamlfukr <command> <filename> <args>
---------------------
Commands:
update
yamlfukr update file.yaml key value
`,
)
defer fmt.Println("*** YAML Ain't Markup Language ***", os.Args)
}
func main() {
// usage yamlfukr update path/to/yaml key value
if len(os.Args) == 1 {
printUsage()
return
}
var action string
switch os.Args[1] {
case "update":
action = os.Args[1]
if len(os.Args) < 5 {
printUsage()
return
}
case "delete":
action = os.Args[1]
default:
printUsage()
return
}
filepath, filename := parseRawFilename(os.Args[2])
viper.SetConfigName(filename)
viper.SetConfigType("yaml")
if filepath == "" {
filepath = "."
}
viper.AddConfigPath(filepath)
if err := viper.ReadInConfig(); err != nil {
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
fmt.Println(
"YAML file not found:",
strings.Join([]string{filepath, filename}, "/"),
)
return
// Config file not found; ignore error if desired
} else {
// Config file was found but another error was produced
}
}
//fmt.Println(action, env)
switch action {
case "update":
key := os.Args[3]
value := os.Args[4]
viper.Set(key, value)
viper.WriteConfig()
}
}
func parseRawFilename(rawFilename string) (string, string) {
var filename string
for _, pattern := range []string{".yaml", ".yml"} {
filename = strings.Replace(rawFilename, pattern, "", 1)
}
path := strings.Split(filename, "/")
if len(path) > 1 {
filename = path[len(path)-1]
}
return strings.Join(path[:len(path) - 1], "/"), filename
}