-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathconfig.go
More file actions
196 lines (155 loc) · 4.7 KB
/
config.go
File metadata and controls
196 lines (155 loc) · 4.7 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
package parser
import (
docopt "github.com/docopt/docopt-go"
"github.com/drycc/workflow-cli/cmd"
)
// Config routes config commands to their specific function.
func Config(argv []string, cmdr cmd.Commander) error {
usage := `
Valid commands for config:
config:list list environment variables for an app
config:set set environment variables for an app
config:unset unset environment variables for an app
config:pull pull environment variables to the path
config:push push environment variables from the path
Use 'drycc help [command]' to learn more.
`
switch argv[0] {
case "config:list":
return configList(argv, cmdr)
case "config:set":
return configSet(argv, cmdr)
case "config:unset":
return configUnset(argv, cmdr)
case "config:pull":
return configPull(argv, cmdr)
case "config:push":
return configPush(argv, cmdr)
default:
if printHelp(argv, usage) {
return nil
}
if argv[0] == "config" {
argv[0] = "config:list"
return configList(argv, cmdr)
}
PrintUsage(cmdr)
return nil
}
}
func configList(argv []string, cmdr cmd.Commander) error {
usage := `
Lists environment variables for an application.
Usage: drycc config:list [options]
Options:
-a --app=<app>
the application that you wish to listed.
--type=<type>
the procType for which the config needs to be listed.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
procType := safeGetString(args, "--type")
return cmdr.ConfigList(app, procType)
}
func configSet(argv []string, cmdr cmd.Commander) error {
usage := `
Sets environment variables for an application.
Usage: drycc config:set <var>=<value> [<var>=<value>...] [options]
Arguments:
<var>
the uniquely identifiable name for the environment variable.
<value>
the value of said environment variable.
Options:
-a --app=<app>
the application that you wish to set.
--type=<type>
the procType for which the config needs to be set.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
procType := safeGetString(args, "--type")
return cmdr.ConfigSet(app, procType, args["<var>=<value>"].([]string))
}
func configUnset(argv []string, cmdr cmd.Commander) error {
usage := `
Unsets an environment variable for an application.
Usage: drycc config:unset <key>... [options]
Arguments:
<key>
the variable to remove from the application's environment.
Options:
-a --app=<app>
the application that you wish to unset.
--type=<type>
the procType for which the config needs to be unset.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
procType := safeGetString(args, "--type")
return cmdr.ConfigUnset(app, procType, args["<key>"].([]string))
}
func configPull(argv []string, cmdr cmd.Commander) error {
usage := `
Extract all environment variables from an application for local use.
The environmental variables can be piped into a file, 'drycc config:pull > file',
or stored locally in a file named .env. This file can be
read by foreman to load the local environment for your app.
Usage: drycc config:pull [options]
Options:
-a --app=<app>
the application that you wish to pull.
--type=<type>
the procType for which the config needs to be pull.
--path=<path>
a path leading to an environment file [default: .env]
-i --interactive
prompts for each value to be overwritten.
-o --overwrite
allows you to have the pull overwrite keys to the path.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
procType := safeGetString(args, "--type")
path := safeGetValue(args, "--path", ".env")
interactive := args["--interactive"].(bool)
overwrite := args["--overwrite"].(bool)
return cmdr.ConfigPull(app, procType, path, interactive, overwrite)
}
func configPush(argv []string, cmdr cmd.Commander) error {
usage := `
Sets environment variables for an application.
This file can be read by foreman
to load the local environment for your app. The file should be piped via
stdin, 'drycc config:push < .env', or using the --path option.
Usage: drycc config:push [options]
Options:
-a --app=<app>
the application that you wish to push.
--type=<type>
the procType for which the config needs to be push.
--path=<path>
a path leading to an environment file [default: .env]
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
procType := safeGetString(args, "--type")
path := safeGetValue(args, "--path", ".env")
return cmdr.ConfigPush(app, procType, path)
}