Skip to content

Commit

Permalink
refactor: introduce syntax/expression package (kyverno#491)
Browse files Browse the repository at this point in the history
Signed-off-by: Charles-Edouard Brétéché <[email protected]>
  • Loading branch information
eddycharly authored Sep 19, 2024
1 parent 4a9eb50 commit e353646
Show file tree
Hide file tree
Showing 8 changed files with 310 additions and 301 deletions.
32 changes: 21 additions & 11 deletions pkg/engine/assert/binding.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,37 @@ import (
"github.com/jmespath-community/go-jmespath/pkg/binding"
"github.com/kyverno/kyverno-json/pkg/engine/template"
"github.com/kyverno/kyverno-json/pkg/jp"
"github.com/kyverno/kyverno-json/pkg/syntax/expression"
"k8s.io/apimachinery/pkg/util/validation/field"
)

func NewContextBinding(path *field.Path, bindings binding.Bindings, value any, entry any, opts ...template.Option) binding.Binding {
return jp.NewLazyBinding(
func() (any, error) {
expression := parseExpression(context.TODO(), entry)
if expression != nil && expression.engine != "" {
if expression.foreach {
return nil, field.Invalid(path.Child("variable"), entry, "foreach is not supported in context")
switch typed := entry.(type) {
case string:
expr := expression.Parse(typed)
if expr.Foreach {
return nil, field.Invalid(path.Child("variable"), typed, "foreach is not supported in context")
}
if expression.binding != "" {
return nil, field.Invalid(path.Child("variable"), entry, "binding is not supported in context")
if expr.Binding != "" {
return nil, field.Invalid(path.Child("variable"), typed, "binding is not supported in context")
}
projected, err := template.Execute(context.TODO(), expression.statement, value, bindings, opts...)
if err != nil {
return nil, field.InternalError(path.Child("variable"), err)
switch expr.Engine {
case expression.EngineJP:
projected, err := template.Execute(context.TODO(), expr.Statement, value, bindings, opts...)
if err != nil {
return nil, field.InternalError(path.Child("variable"), err)
}
return projected, nil
case expression.EngineCEL:
return nil, field.Invalid(path.Child("variable"), expr.Engine, "engine not supported")
default:
return expr.Statement, nil
}
return projected, nil
default:
return typed, nil
}
return entry, nil
},
)
}
75 changes: 0 additions & 75 deletions pkg/engine/assert/expression.go

This file was deleted.

178 changes: 0 additions & 178 deletions pkg/engine/assert/expression_test.go

This file was deleted.

Loading

0 comments on commit e353646

Please sign in to comment.