Skip to content

Commit 3508492

Browse files
committed
feat: support print statement in gator (#2949)
1 parent ec63064 commit 3508492

File tree

5 files changed

+48
-8
lines changed

5 files changed

+48
-8
lines changed

cmd/gator/verify/verify.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ func runE(cmd *cobra.Command, args []string) error {
112112
func runSuites(ctx context.Context, fileSystem fs.FS, suites []*verify.Suite, filter verify.Filter) error {
113113
isFailure := false
114114

115-
runner, err := verify.NewRunner(fileSystem, gator.NewOPAClient, verify.IncludeTrace(includeTrace), verify.UseK8sCEL(flagEnableK8sCel))
115+
runner, err := verify.NewRunner(fileSystem, gator.NewOPAClient, verify.IncludeTrace(includeTrace), verify.EnablePrint(verbose), verify.UseK8sCEL(flagEnableK8sCel))
116116
if err != nil {
117117
return err
118118
}

pkg/gator/opa.go

+14-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,10 @@ import (
66
"github.com/open-policy-agent/gatekeeper/v3/pkg/drivers/k8scel"
77
"github.com/open-policy-agent/gatekeeper/v3/pkg/target"
88
"github.com/open-policy-agent/gatekeeper/v3/pkg/util"
9+
"os"
910
)
1011

11-
func NewOPAClient(includeTrace bool, k8sCEL bool) (Client, error) {
12+
func NewOPAClient(includeTrace bool, printEnabled bool, k8sCEL bool) (Client, error) {
1213
args := []constraintclient.Opt{constraintclient.Targets(&target.K8sValidationTarget{})}
1314

1415
if k8sCEL {
@@ -19,7 +20,18 @@ func NewOPAClient(includeTrace bool, k8sCEL bool) (Client, error) {
1920
args = append(args, constraintclient.Driver(k8sDriver))
2021
}
2122

22-
driver, err := rego.New(rego.Tracing(includeTrace))
23+
driverArgs := []rego.Arg{
24+
rego.Tracing(includeTrace),
25+
}
26+
27+
if printEnabled {
28+
driverArgs = append(driverArgs,
29+
rego.PrintEnabled(printEnabled),
30+
rego.PrintHook(NewPrintHook(os.Stdout)),
31+
)
32+
}
33+
34+
driver, err := rego.New(driverArgs...)
2335
if err != nil {
2436
return nil, err
2537
}

pkg/gator/print.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package gator
2+
3+
import (
4+
"fmt"
5+
v1 "github.com/open-policy-agent/opa/v1/topdown/print"
6+
"io"
7+
)
8+
9+
type PrintHook struct {
10+
writer io.Writer
11+
}
12+
13+
func NewPrintHook(writer io.Writer) PrintHook {
14+
return PrintHook{writer}
15+
}
16+
17+
func (h PrintHook) Print(ctx v1.Context, string string) error {
18+
_, err := fmt.Fprintln(h.writer, string)
19+
return err
20+
}

pkg/gator/verify/runner.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,18 @@ type Runner struct {
3434

3535
// newClient instantiates a Client for compiling Templates/Constraints, and
3636
// validating objects against them.
37-
newClient func(includeTrace bool, useK8sCEL bool) (gator.Client, error)
37+
newClient func(includeTrace bool, printEnabled bool, useK8sCEL bool) (gator.Client, error)
3838

3939
scheme *runtime.Scheme
4040

4141
includeTrace bool
4242

43+
printEnabled bool
44+
4345
useK8sCEL bool
4446
}
4547

46-
func NewRunner(filesystem fs.FS, newClient func(includeTrace bool, useK8sCEL bool) (gator.Client, error), opts ...RunnerOptions) (*Runner, error) {
48+
func NewRunner(filesystem fs.FS, newClient func(includeTrace bool, printEnabled bool, useK8sCEL bool) (gator.Client, error), opts ...RunnerOptions) (*Runner, error) {
4749
s := runtime.NewScheme()
4850
err := apis.AddToScheme(s)
4951
if err != nil {
@@ -71,6 +73,12 @@ func IncludeTrace(includeTrace bool) RunnerOptions {
7173
}
7274
}
7375

76+
func EnablePrint(printEnabled bool) RunnerOptions {
77+
return func(r *Runner) {
78+
r.printEnabled = printEnabled
79+
}
80+
}
81+
7482
func UseK8sCEL(useK8sCEL bool) RunnerOptions {
7583
return func(r *Runner) {
7684
r.useK8sCEL = useK8sCEL
@@ -144,7 +152,7 @@ func (r *Runner) runTest(ctx context.Context, suiteDir string, filter Filter, t
144152
}
145153

146154
func (r *Runner) tryAddConstraint(ctx context.Context, suiteDir string, t *Test) error {
147-
client, err := r.newClient(r.includeTrace, r.useK8sCEL)
155+
client, err := r.newClient(r.includeTrace, r.printEnabled, r.useK8sCEL)
148156
if err != nil {
149157
return fmt.Errorf("%w: %w", gator.ErrCreatingClient, err)
150158
}
@@ -213,7 +221,7 @@ func (r *Runner) skipCase(tc *Case) CaseResult {
213221
}
214222

215223
func (r *Runner) makeTestClient(ctx context.Context, suiteDir string, t *Test) (gator.Client, error) {
216-
client, err := r.newClient(r.includeTrace, r.useK8sCEL)
224+
client, err := r.newClient(r.includeTrace, r.printEnabled, r.useK8sCEL)
217225
if err != nil {
218226
return nil, fmt.Errorf("%w: %w", gator.ErrCreatingClient, err)
219227
}

pkg/gator/verify/runner_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1268,7 +1268,7 @@ func TestRunner_Run_ClientError(t *testing.T) {
12681268
TestResults: []TestResult{{Error: gator.ErrCreatingClient}},
12691269
}
12701270

1271-
runner, err := NewRunner(fstest.MapFS{}, func(_ bool, _ bool) (gator.Client, error) {
1271+
runner, err := NewRunner(fstest.MapFS{}, func(_ bool, _ bool, _ bool) (gator.Client, error) {
12721272
return nil, errors.New("error")
12731273
})
12741274
if err != nil {

0 commit comments

Comments
 (0)