mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-12 19:32:48 -06:00
cmd: Support --ignore in eval cmd when using bundle flag (-b) (#8062)
Signed-off-by: Sebastian Spaink <sebastianspaink@gmail.com> Co-authored-by: Ronnie-personal <76408835+Ronnie-personal@users.noreply.github.com>
This commit is contained in:
@@ -610,6 +610,7 @@ func setupEval(args []string, params evalCommandParams) (*evalContext, error) {
|
||||
for _, bundleDir := range params.bundlePaths.v {
|
||||
regoArgs = append(regoArgs, rego.LoadBundle(bundleDir))
|
||||
}
|
||||
regoArgs = append(regoArgs, rego.WithFilter(buildCommandLoaderFilter(true, params.ignore)))
|
||||
} else {
|
||||
b, err := generateOptimizedBundle(params, true, buildCommandLoaderFilter(true, params.ignore), params.bundlePaths.v)
|
||||
if err != nil {
|
||||
|
||||
@@ -1019,6 +1019,36 @@ func TestEvalReturnsRegoError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestEvalBundlePathWithIgnoreFlag(t *testing.T) {
|
||||
files := map[string]string{
|
||||
"good_policy.rego": `
|
||||
package example
|
||||
p1 if { data.foo }`,
|
||||
"bad_policy.rego": `
|
||||
package example
|
||||
var `,
|
||||
"data.json": `
|
||||
{"foo": true, "bar": false}`,
|
||||
}
|
||||
|
||||
test.WithTempFS(files, func(path string) {
|
||||
params := newEvalCommandParams()
|
||||
if err := params.bundlePaths.Set(path); err != nil {
|
||||
t.Fatalf("Unable to set bundle path: %v", err)
|
||||
}
|
||||
params.ignore = []string{"bad_policy.rego"}
|
||||
|
||||
var buf bytes.Buffer
|
||||
|
||||
// Evaluate policies
|
||||
defined, err := eval([]string{"data.example.p1"}, params, &buf, &buf)
|
||||
|
||||
if !defined || err != nil {
|
||||
t.Fatalf("Unexpected undefined or error for p1: %v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestEvalWithBundleData(t *testing.T) {
|
||||
files := map[string]string{
|
||||
"x/x.rego": "package x\np = 1",
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"github.com/open-policy-agent/opa/v1/bundle"
|
||||
"github.com/open-policy-agent/opa/v1/ir"
|
||||
"github.com/open-policy-agent/opa/v1/loader"
|
||||
"github.com/open-policy-agent/opa/v1/loader/filter"
|
||||
"github.com/open-policy-agent/opa/v1/metrics"
|
||||
"github.com/open-policy-agent/opa/v1/plugins"
|
||||
"github.com/open-policy-agent/opa/v1/resolver"
|
||||
@@ -671,6 +672,7 @@ type Rego struct {
|
||||
regoVersion ast.RegoVersion
|
||||
compilerHook func(*ast.Compiler)
|
||||
evalMode *ast.CompilerEvalMode
|
||||
filter filter.LoaderFilter
|
||||
}
|
||||
|
||||
func (r *Rego) RegoVersion() ast.RegoVersion {
|
||||
@@ -1047,6 +1049,12 @@ func LoadBundle(path string) func(r *Rego) {
|
||||
}
|
||||
}
|
||||
|
||||
func WithFilter(f filter.LoaderFilter) func(r *Rego) {
|
||||
return func(r *Rego) {
|
||||
r.filter = f
|
||||
}
|
||||
}
|
||||
|
||||
// ParsedBundle returns an argument that adds a bundle to be loaded.
|
||||
func ParsedBundle(name string, b *bundle.Bundle) func(r *Rego) {
|
||||
return func(r *Rego) {
|
||||
@@ -2046,6 +2054,7 @@ func (r *Rego) loadBundles(_ context.Context, _ storage.Transaction, m metrics.M
|
||||
WithSkipBundleVerification(r.skipBundleVerification).
|
||||
WithRegoVersion(r.regoVersion).
|
||||
WithCapabilities(r.capabilities).
|
||||
WithFilter(r.filter).
|
||||
AsBundle(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("loading error: %s", err)
|
||||
|
||||
Reference in New Issue
Block a user