-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcanary.go
More file actions
157 lines (118 loc) · 3.17 KB
/
canary.go
File metadata and controls
157 lines (118 loc) · 3.17 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
package parser
import (
docopt "github.com/docopt/docopt-go"
"github.com/drycc/workflow-cli/cmd"
)
// Canary displays all relevant commands for `drycc autoscale`.
func Canary(argv []string, cmdr cmd.Commander) error {
usage := `
Valid commands for canary:
canary:info list canary options of an application
canary:create turn on canary for an app procfile type
canary:remove turn off canary for an app procfile type
canary:release release canary deploy for an app
Use 'drycc help [command]' to learn more.
`
switch argv[0] {
case "canary:info":
return canaryInfo(argv, cmdr)
case "canary:create":
return canaryCreate(argv, cmdr)
case "canary:remove":
return canaryRemove(argv, cmdr)
case "canary:release":
return canaryRelease(argv, cmdr)
case "canary:rollback":
return canaryRollback(argv, cmdr)
default:
if printHelp(argv, usage) {
return nil
}
if argv[0] == "canary" {
argv[0] = "canary:info"
return canaryInfo(argv, cmdr)
}
PrintUsage(cmdr)
return nil
}
}
func canaryInfo(argv []string, cmdr cmd.Commander) error {
usage := `
Prints a list of canary options for the application.
Usage: drycc canary:info [options]
Options:
-a --app=<app>
the uniquely identifiable name for the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
return cmdr.CanaryInfo(safeGetString(args, "--app"))
}
func canaryCreate(argv []string, cmdr cmd.Commander) error {
usage := `
Set canary option type for an app.
Usage: drycc canary:create <process-type>... [options]
Arguments:
<process-type>
the process type to add to the application's canary settings.
Options:
-a --app=<app>
the uniquely identifiable name of the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
return cmdr.CanaryCreate(app, args["<process-type>"].([]string))
}
func canaryRemove(argv []string, cmdr cmd.Commander) error {
usage := `
Remove canary option type for an app.
Usage: drycc canary:remove <process-type>... [options]
Arguments:
<process-type>
the process type to add to the application's canary settings.
Options:
-a --app=<app>
the uniquely identifiable name of the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
return cmdr.CanaryRemove(app, args["<process-type>"].([]string))
}
func canaryRelease(argv []string, cmdr cmd.Commander) error {
usage := `
Release canary deploy for an app.
Usage: drycc canary:release [options]
Options:
-a --app=<app>
the uniquely identifiable name of the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
return cmdr.CanaryRelease(app)
}
func canaryRollback(argv []string, cmdr cmd.Commander) error {
usage := `
Rollback canary deploy for an app.
Usage: drycc canary:rollback [options]
Options:
-a --app=<app>
the uniquely identifiable name of the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
return cmdr.CanaryRollback(app)
}