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:
Sebastian Spaink
2025-11-25 03:33:29 -06:00
committed by GitHub
parent dd2ccc7024
commit d82c21c9d3
3 changed files with 40 additions and 0 deletions
+1
View File
@@ -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 {
+30
View File
@@ -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",
+9
View File
@@ -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)