-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathservices.go
More file actions
132 lines (102 loc) · 3.15 KB
/
services.go
File metadata and controls
132 lines (102 loc) · 3.15 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
package parser
import (
docopt "github.com/docopt/docopt-go"
"github.com/drycc/workflow-cli/cmd"
)
// Services routes service commands to their specific function.
func Services(argv []string, cmdr cmd.Commander) error {
usage := `
Valid commands for services:
services:add create service for an application
services:list list application services
services:remove remove service from an application
Use 'drycc help [command]' to learn more.
`
switch argv[0] {
case "services:add":
return servicesAdd(argv, cmdr)
case "services:list":
return servicesList(argv, cmdr)
case "services:remove":
return servicesRemove(argv, cmdr)
default:
if printHelp(argv, usage) {
return nil
}
if argv[0] == "services" {
argv[0] = "services:list"
return servicesList(argv, cmdr)
}
PrintUsage(cmdr)
return nil
}
}
func servicesAdd(argv []string, cmdr cmd.Commander) error {
usage := `
Creates extra service for an application and binds it to specific route of the main app domain
Usage: drycc services:add <ptype> <port>:<target> [options]
Arguments:
<ptype>
procfile type which should handle the request, e.g. webhooks (should be bind to the port PORT).
only single extra service per Porcfile type could be created
<port>
the port that will be exposed by this service.
<target>
number or name of the port to access on the pods targeted by the service.
Options:
-a --app=<app>
the uniquely identifiable name for the application.
--protocol=<protocol>
the IP protocol for this port. Supports TCP, UDP, and SCTP. Default is TCP.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
ptype := safeGetString(args, "<ptype>")
protocol := safeGetString(args, "--protocol")
ports := safeGetString(args, "<port>:<target>")
return cmdr.ServicesAdd(app, ptype, ports, protocol)
}
func servicesList(argv []string, cmdr cmd.Commander) error {
usage := `
Lists extra services for an application
Usage: drycc services:list [options]
Options:
-a --app=<app>
the uniquely identifiable name for the application.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
return cmdr.ServicesList(app)
}
func servicesRemove(argv []string, cmdr cmd.Commander) error {
usage := `
Deletes specific extra service for application
Usage: drycc services:remove <ptype> <port> [options]
Arguments:
<ptype>
procfile type which should handle the request, e.g. webhooks (should be bind to the port PORT).
Only single extra service per Porcfile type could be created
<port>
the port exposed by this service.
Options:
-a --app=<app>
the uniquely identifiable name for the application.
--protocol=<protocol>
the IP protocol for this port. Supports TCP, UDP, and SCTP. Default is TCP.
`
args, err := docopt.ParseArgs(usage, argv, "")
if err != nil {
return err
}
app := safeGetString(args, "--app")
ptype := safeGetString(args, "<ptype>")
protocol := safeGetString(args, "--protocol")
port := safeGetInt(args, "<port>")
return cmdr.ServicesRemove(app, ptype, protocol, port)
}