-
Notifications
You must be signed in to change notification settings - Fork 8
/
command_clients.go
117 lines (100 loc) · 2.68 KB
/
command_clients.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
115
116
117
package salt
import (
"net"
"strings"
)
type CommandClient string
const (
LocalClient CommandClient = "local"
LocalAsyncClient CommandClient = "local_async"
RunnerClient CommandClient = "runner"
RunnerAsyncClient CommandClient = "runner_async"
WheelClient CommandClient = "wheel"
WheelAsyncClient CommandClient = "wheel_async"
SSHClient CommandClient = "ssh"
)
type TargetType string
const (
Glob TargetType = "glob"
Pcre TargetType = "pcre"
List TargetType = "list"
Grain TargetType = "grain"
GrainPcre TargetType = "grain_pcre"
Pillar TargetType = "pillar"
PillarPcre TargetType = "pillar_pcre"
NodeGroup TargetType = "nodegroup"
Range TargetType = "range"
Compound TargetType = "compound"
IPCIDR TargetType = "ipcidr"
)
type commandRequest struct {
Client CommandClient `json:"client"`
Target string `json:"tgt,omitempty"` // string or slices
Function string `json:"fun"`
Arguments []string `json:"arg,omitempty"` // []string or [][]string
Match string `json:"match,omitempty"` // Wheel Client
KwArg map[string]interface{} `json:"kwarg,omitempty"`
TargetType TargetType `json:"tgt_type,omitempty"`
Timeout int `json:"timeout,omitempty"`
FullReturn bool `json:"full_return,omitempty"`
}
type RunOption func(*commandRequest)
func WithGlobTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = Glob
}
}
func WithPcreTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = Pcre
}
}
func WithListTarget(t []string) RunOption {
return func(r *commandRequest) {
r.Target = strings.Join(t, ",")
r.TargetType = List
}
}
func WithPillarTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = Pillar
}
}
func WithPillarPcreTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = PillarPcre
}
}
func WithGrainTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = Grain
}
}
func WithGrainPcreTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = GrainPcre
}
}
func WithNodeGroupTarget(t string) RunOption {
return func(r *commandRequest) {
r.Target = t
r.TargetType = NodeGroup
}
}
func WithIPCIDRTarget(t net.IPNet) RunOption {
return func(r *commandRequest) {
r.Target = t.String()
r.TargetType = IPCIDR
}
}
func WithKeywordArguments(kw map[string]interface{}) RunOption {
return func(r *commandRequest) {
r.KwArg = kw
}
}