-
Notifications
You must be signed in to change notification settings - Fork 2
/
rego_flags.go
100 lines (93 loc) · 2.4 KB
/
rego_flags.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
package flag
// e.g. config yaml:
//
// rego:
// trace: true
// config-policy: "custom-policy/policy"
// policy-namespaces: "user"
var (
SkipPolicyUpdateFlag = Flag{
Name: "skip-policy-update",
ConfigName: "rego.skip-policy-update",
Default: false,
Usage: "skip fetching rego policy updates",
}
TraceFlag = Flag{
Name: "trace",
ConfigName: "rego.trace",
Default: false,
Usage: "enable more verbose trace output for custom queries",
}
ConfigPolicyFlag = Flag{
Name: "config-policy",
ConfigName: "rego.policy",
Default: []string{},
Usage: "specify the paths to the Rego policy files or to the directories containing them, applying config files",
Aliases: []Alias{
{Name: "policy"},
},
}
ConfigDataFlag = Flag{
Name: "config-data",
ConfigName: "rego.data",
Default: []string{},
Usage: "specify paths from which data for the Rego policies will be recursively loaded",
Aliases: []Alias{
{Name: "data"},
},
}
PolicyNamespaceFlag = Flag{
Name: "policy-namespaces",
ConfigName: "rego.namespaces",
Default: []string{},
Usage: "Rego namespaces",
Aliases: []Alias{
{Name: "namespaces"},
},
}
)
// RegoFlagGroup composes common printer flag structs used for commands providing misconfinguration scanning.
type RegoFlagGroup struct {
SkipPolicyUpdate *Flag
Trace *Flag
PolicyPaths *Flag
DataPaths *Flag
PolicyNamespaces *Flag
}
type RegoOptions struct {
SkipPolicyUpdate bool
Trace bool
PolicyPaths []string
DataPaths []string
PolicyNamespaces []string
}
func NewRegoFlagGroup() *RegoFlagGroup {
return &RegoFlagGroup{
SkipPolicyUpdate: &SkipPolicyUpdateFlag,
Trace: &TraceFlag,
PolicyPaths: &ConfigPolicyFlag,
DataPaths: &ConfigDataFlag,
PolicyNamespaces: &PolicyNamespaceFlag,
}
}
func (f *RegoFlagGroup) Name() string {
return "Rego"
}
func (f *RegoFlagGroup) Flags() []*Flag {
return []*Flag{
f.SkipPolicyUpdate,
f.Trace,
f.PolicyPaths,
f.DataPaths,
f.PolicyNamespaces,
}
}
func (f *RegoFlagGroup) ToOptions() (RegoOptions, error) {
return RegoOptions{
SkipPolicyUpdate: getBool(f.SkipPolicyUpdate),
Trace: getBool(f.Trace),
PolicyPaths: getStringSlice(f.PolicyPaths),
DataPaths: getStringSlice(f.DataPaths),
PolicyNamespaces: getStringSlice(f.PolicyNamespaces),
}, nil
}