Skip to content

Commit 4c8575d

Browse files
refactor: templating packages (#1783) (#1785)
Signed-off-by: Charles-Edouard Brétéché <[email protected]> Co-authored-by: Charles-Edouard Brétéché <[email protected]>
1 parent d0a7cb9 commit 4c8575d

35 files changed

+189
-188
lines changed

pkg/engine/bindings/bindings.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import (
77

88
"github.com/jmespath-community/go-jmespath/pkg/binding"
99
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
10-
"github.com/kyverno/chainsaw/pkg/engine/functions"
11-
mutation "github.com/kyverno/chainsaw/pkg/mutate"
12-
"github.com/kyverno/kyverno-json/pkg/engine/template"
10+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1311
)
1412

1513
var identifier = regexp.MustCompile(`^\w+$`)
@@ -26,14 +24,14 @@ func RegisterBinding(ctx context.Context, bindings binding.Bindings, name string
2624
}
2725

2826
func ResolveBinding(ctx context.Context, bindings binding.Bindings, input any, variable v1alpha1.Binding) (string, any, error) {
29-
name, err := String(variable.Name, bindings)
27+
name, err := templating.String(ctx, variable.Name, bindings)
3028
if err != nil {
3129
return "", nil, err
3230
}
3331
if err := checkBindingName(name); err != nil {
3432
return "", nil, err
3533
}
36-
value, err := mutation.Mutate(ctx, nil, mutation.Parse(ctx, variable.Value.Value), input, bindings, template.WithFunctionCaller(functions.Caller))
34+
value, err := templating.Template(ctx, variable.Value, input, bindings)
3735
if err != nil {
3836
return "", nil, err
3937
}

pkg/engine/bindings/string.go

-50
This file was deleted.

pkg/engine/checks/check.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,5 @@ func Check(ctx context.Context, obj any, bindings binding.Bindings, check *v1alp
2222
if bindings == nil {
2323
bindings = binding.NewBindings()
2424
}
25-
return assert.Assert(ctx, nil, assert.Parse(ctx, check.Value), obj, bindings, template.WithFunctionCaller(functions.Caller))
25+
return assert.Assert(ctx, nil, assert.Parse(ctx, check.Value), obj, bindings, template.WithFunctionCaller(functions.Caller()))
2626
}

pkg/engine/context/evaluate.go

-26
This file was deleted.

pkg/engine/functions/caller.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package functions
22

33
import (
44
"context"
5+
"sync"
56

67
jpfunctions "github.com/jmespath-community/go-jmespath/pkg/functions"
78
"github.com/jmespath-community/go-jmespath/pkg/interpreter"
89
"github.com/kyverno/kyverno-json/pkg/engine/template"
910
)
1011

11-
var Caller = func() interpreter.FunctionCaller {
12+
var Caller = sync.OnceValue(func() interpreter.FunctionCaller {
1213
var funcs []jpfunctions.FunctionEntry
1314
funcs = append(funcs, template.GetFunctions(context.Background())...)
1415
funcs = append(funcs, GetFunctions()...)
1516
return interpreter.NewFunctionCaller(funcs...)
16-
}()
17+
})

pkg/engine/kubectl/describe.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,36 @@
11
package kubectl
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67

78
"github.com/jmespath-community/go-jmespath/pkg/binding"
89
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
910
"github.com/kyverno/chainsaw/pkg/client"
10-
"github.com/kyverno/chainsaw/pkg/engine/bindings"
11+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1112
)
1213

13-
func Describe(client client.Client, tc binding.Bindings, collector *v1alpha1.Describe) (string, []string, error) {
14+
func Describe(ctx context.Context, client client.Client, tc binding.Bindings, collector *v1alpha1.Describe) (string, []string, error) {
1415
if collector == nil {
1516
return "", nil, errors.New("collector is null")
1617
}
17-
name, err := bindings.String(collector.Name, tc)
18+
name, err := templating.String(ctx, collector.Name, tc)
1819
if err != nil {
1920
return "", nil, err
2021
}
21-
namespace, err := bindings.String(collector.Namespace, tc)
22+
namespace, err := templating.String(ctx, collector.Namespace, tc)
2223
if err != nil {
2324
return "", nil, err
2425
}
25-
selector, err := bindings.String(collector.Selector, tc)
26+
selector, err := templating.String(ctx, collector.Selector, tc)
2627
if err != nil {
2728
return "", nil, err
2829
}
2930
if name != "" && selector != "" {
3031
return "", nil, errors.New("name cannot be provided when a selector is specified")
3132
}
32-
resource, clustered, err := mapResource(client, tc, collector.ObjectType)
33+
resource, clustered, err := mapResource(ctx, client, tc, collector.ObjectType)
3334
if err != nil {
3435
return "", nil, err
3536
}

pkg/engine/kubectl/describe_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubectl
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
@@ -271,7 +272,7 @@ func TestDescribe(t *testing.T) {
271272
}}
272273
for _, tt := range tests {
273274
t.Run(tt.name, func(t *testing.T) {
274-
entrypoint, args, err := Describe(client, nil, tt.collector)
275+
entrypoint, args, err := Describe(context.TODO(), client, nil, tt.collector)
275276
if tt.wantErr {
276277
assert.Error(t, err)
277278
} else {

pkg/engine/kubectl/get.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,39 @@
11
package kubectl
22

33
import (
4+
"context"
45
"errors"
56

67
"github.com/jmespath-community/go-jmespath/pkg/binding"
78
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
89
"github.com/kyverno/chainsaw/pkg/client"
9-
"github.com/kyverno/chainsaw/pkg/engine/bindings"
10+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1011
)
1112

12-
func Get(client client.Client, tc binding.Bindings, collector *v1alpha1.Get) (string, []string, error) {
13+
func Get(ctx context.Context, client client.Client, tc binding.Bindings, collector *v1alpha1.Get) (string, []string, error) {
1314
if collector == nil {
1415
return "", nil, errors.New("collector is null")
1516
}
16-
name, err := bindings.String(collector.Name, tc)
17+
name, err := templating.String(ctx, collector.Name, tc)
1718
if err != nil {
1819
return "", nil, err
1920
}
20-
namespace, err := bindings.String(collector.Namespace, tc)
21+
namespace, err := templating.String(ctx, collector.Namespace, tc)
2122
if err != nil {
2223
return "", nil, err
2324
}
24-
selector, err := bindings.String(collector.Selector, tc)
25+
selector, err := templating.String(ctx, collector.Selector, tc)
2526
if err != nil {
2627
return "", nil, err
2728
}
28-
format, err := bindings.String(string(collector.Format), tc)
29+
format, err := templating.String(ctx, string(collector.Format), tc)
2930
if err != nil {
3031
return "", nil, err
3132
}
3233
if name != "" && selector != "" {
3334
return "", nil, errors.New("name cannot be provided when a selector is specified")
3435
}
35-
resource, clustered, err := mapResource(client, tc, collector.ObjectType)
36+
resource, clustered, err := mapResource(ctx, client, tc, collector.ObjectType)
3637
if err != nil {
3738
return "", nil, err
3839
}

pkg/engine/kubectl/get_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubectl
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
@@ -255,7 +256,7 @@ func TestGet(t *testing.T) {
255256
}}
256257
for _, tt := range tests {
257258
t.Run(tt.name, func(t *testing.T) {
258-
entrypoint, args, err := Get(client, nil, tt.collector)
259+
entrypoint, args, err := Get(context.TODO(), client, nil, tt.collector)
259260
if tt.wantErr {
260261
assert.Error(t, err)
261262
} else {

pkg/engine/kubectl/logs.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,32 @@
11
package kubectl
22

33
import (
4+
"context"
45
"errors"
56
"fmt"
67

78
"github.com/jmespath-community/go-jmespath/pkg/binding"
89
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
9-
"github.com/kyverno/chainsaw/pkg/engine/bindings"
10+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1011
)
1112

12-
func Logs(tc binding.Bindings, collector *v1alpha1.PodLogs) (string, []string, error) {
13+
func Logs(ctx context.Context, tc binding.Bindings, collector *v1alpha1.PodLogs) (string, []string, error) {
1314
if collector == nil {
1415
return "", nil, errors.New("collector is null")
1516
}
16-
name, err := bindings.String(collector.Name, tc)
17+
name, err := templating.String(ctx, collector.Name, tc)
1718
if err != nil {
1819
return "", nil, err
1920
}
20-
namespace, err := bindings.String(collector.Namespace, tc)
21+
namespace, err := templating.String(ctx, collector.Namespace, tc)
2122
if err != nil {
2223
return "", nil, err
2324
}
24-
selector, err := bindings.String(collector.Selector, tc)
25+
selector, err := templating.String(ctx, collector.Selector, tc)
2526
if err != nil {
2627
return "", nil, err
2728
}
28-
container, err := bindings.String(collector.Container, tc)
29+
container, err := templating.String(ctx, collector.Container, tc)
2930
if err != nil {
3031
return "", nil, err
3132
}

pkg/engine/kubectl/logs_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubectl
22

33
import (
4+
"context"
45
"testing"
56

67
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
@@ -179,7 +180,7 @@ func TestLogs(t *testing.T) {
179180
}}
180181
for _, tt := range tests {
181182
t.Run(tt.name, func(t *testing.T) {
182-
entrypoint, args, err := Logs(nil, tt.collector)
183+
entrypoint, args, err := Logs(context.TODO(), nil, tt.collector)
183184
if tt.wantErr {
184185
assert.Error(t, err)
185186
} else {

pkg/engine/kubectl/mapping.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
package kubectl
22

33
import (
4+
"context"
45
"errors"
56
"strings"
67

78
"github.com/jmespath-community/go-jmespath/pkg/binding"
89
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
910
"github.com/kyverno/chainsaw/pkg/client"
10-
"github.com/kyverno/chainsaw/pkg/engine/bindings"
11+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1112
"k8s.io/apimachinery/pkg/api/meta"
1213
"k8s.io/apimachinery/pkg/runtime/schema"
1314
)
1415

15-
func mapResource(client client.Client, tc binding.Bindings, resource v1alpha1.ObjectType) (string, bool, error) {
16+
func mapResource(ctx context.Context, client client.Client, tc binding.Bindings, resource v1alpha1.ObjectType) (string, bool, error) {
1617
if resource.APIVersion != "" && resource.Kind != "" {
17-
if apiVersion, err := bindings.String(resource.APIVersion, tc); err != nil {
18+
if apiVersion, err := templating.String(ctx, resource.APIVersion, tc); err != nil {
1819
return "", false, err
19-
} else if kind, err := bindings.String(resource.Kind, tc); err != nil {
20+
} else if kind, err := templating.String(ctx, resource.Kind, tc); err != nil {
2021
return "", false, err
2122
} else {
2223
return mapResourceFromApiVersionAndKind(client, apiVersion, kind)

pkg/engine/kubectl/proxy.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
11
package kubectl
22

33
import (
4+
"context"
45
"errors"
56
"path"
67

78
"github.com/jmespath-community/go-jmespath/pkg/binding"
89
"github.com/kyverno/chainsaw/pkg/apis/v1alpha1"
910
"github.com/kyverno/chainsaw/pkg/client"
10-
"github.com/kyverno/chainsaw/pkg/engine/bindings"
11+
"github.com/kyverno/chainsaw/pkg/engine/templating"
1112
)
1213

13-
func Proxy(client client.Client, tc binding.Bindings, collector *v1alpha1.Proxy) (string, []string, error) {
14+
func Proxy(ctx context.Context, client client.Client, tc binding.Bindings, collector *v1alpha1.Proxy) (string, []string, error) {
1415
if collector == nil {
1516
return "", nil, errors.New("collector is null")
1617
}
17-
name, err := bindings.String(collector.Name, tc)
18+
name, err := templating.String(ctx, collector.Name, tc)
1819
if err != nil {
1920
return "", nil, err
2021
}
21-
namespace, err := bindings.String(collector.Namespace, tc)
22+
namespace, err := templating.String(ctx, collector.Namespace, tc)
2223
if err != nil {
2324
return "", nil, err
2425
}
25-
targetPath, err := bindings.String(collector.TargetPath, tc)
26+
targetPath, err := templating.String(ctx, collector.TargetPath, tc)
2627
if err != nil {
2728
return "", nil, err
2829
}
29-
targetPort, err := bindings.String(collector.TargetPort, tc)
30+
targetPort, err := templating.String(ctx, collector.TargetPort, tc)
3031
if err != nil {
3132
return "", nil, err
3233
}
33-
resource, _, err := mapResource(client, tc, collector.ObjectType)
34+
resource, _, err := mapResource(ctx, client, tc, collector.ObjectType)
3435
if err != nil {
3536
return "", nil, err
3637
}

0 commit comments

Comments
 (0)