From c4726a0728460f3e0722a8559de3686419b9fd6d Mon Sep 17 00:00:00 2001 From: natasha41575 Date: Mon, 23 May 2022 13:57:32 -0700 Subject: [PATCH 1/2] move NewConfigMap to new package and add broken test --- internal/fnruntime/runner.go | 14 +------------- internal/fnruntime/utils.go | 19 +++++++++++++++++++ internal/fnruntime/utils_test.go | 16 ++++++++++++++++ porch/pkg/engine/eval.go | 4 ++-- porch/pkg/kpt/eval.go | 20 -------------------- porch/pkg/kpt/eval_test.go | 3 ++- 6 files changed, 40 insertions(+), 36 deletions(-) diff --git a/internal/fnruntime/runner.go b/internal/fnruntime/runner.go index 1e62b9a6c3..98c404b203 100644 --- a/internal/fnruntime/runner.go +++ b/internal/fnruntime/runner.go @@ -508,19 +508,7 @@ func newFnConfig(fsys filesys.FileSystem, f *kptfilev1.Function, pkgPath types.U // directly use the config from file return node, nil case len(f.ConfigMap) != 0: - node = yaml.NewMapRNode(&f.ConfigMap) - if node == nil { - return nil, nil - } - // create a ConfigMap only for configMap config - configNode := yaml.MustParse(` -apiVersion: v1 -kind: ConfigMap -metadata: - name: function-input -data: {} -`) - err := configNode.PipeE(yaml.SetField("data", node)) + configNode, err := NewConfigMap(f.ConfigMap) if err != nil { return nil, errors.E(op, fn, err) } diff --git a/internal/fnruntime/utils.go b/internal/fnruntime/utils.go index acfe6d658b..cda6962f38 100644 --- a/internal/fnruntime/utils.go +++ b/internal/fnruntime/utils.go @@ -221,3 +221,22 @@ func annoMatch(node *yaml.RNode, selector kptfilev1.Selector) bool { } return true } + +func NewConfigMap(data map[string]string) (*yaml.RNode, error) { + node := yaml.NewMapRNode(&data) + if node == nil { + return nil, nil + } + // create a ConfigMap only for configMap config + configMap := yaml.MustParse(` +apiVersion: v1 +kind: ConfigMap +metadata: + name: function-input +data: {} +`) + if err := configMap.PipeE(yaml.SetField("data", node)); err != nil { + return nil, err + } + return configMap, nil +} diff --git a/internal/fnruntime/utils_test.go b/internal/fnruntime/utils_test.go index dafb230d76..1be89192f7 100644 --- a/internal/fnruntime/utils_test.go +++ b/internal/fnruntime/utils_test.go @@ -140,3 +140,19 @@ spec: }) } } + +func TestNewConfigMap(t *testing.T) { + data := map[string]string{ + "normal string": "abc", + "integer": "8081", + "float": "1.23", + "bool": "true", + } + m, err := NewConfigMap(data) + assert.NoError(t, err) + mapAsString := m.MustString() + assert.Contains(t, mapAsString, `bool: true`) + assert.Contains(t, mapAsString, `normal string: abc`) + assert.Contains(t, mapAsString, `integer: 8081`) + assert.Contains(t, mapAsString, `float: 1.23`) +} diff --git a/porch/pkg/engine/eval.go b/porch/pkg/engine/eval.go index 5ef7fe8430..74274794ac 100644 --- a/porch/pkg/engine/eval.go +++ b/porch/pkg/engine/eval.go @@ -18,10 +18,10 @@ import ( "context" "fmt" + "github.com/GoogleContainerTools/kpt/internal/fnruntime" v1 "github.com/GoogleContainerTools/kpt/pkg/api/kptfile/v1" "github.com/GoogleContainerTools/kpt/pkg/fn" api "github.com/GoogleContainerTools/kpt/porch/api/porch/v1alpha1" - "github.com/GoogleContainerTools/kpt/porch/pkg/kpt" "github.com/GoogleContainerTools/kpt/porch/pkg/repository" "go.opentelemetry.io/otel/trace" "sigs.k8s.io/kustomize/kyaml/fn/runtime/runtimeutil" @@ -51,7 +51,7 @@ func (m *evalFunctionMutation) Apply(ctx context.Context, resources repository.P var functionConfig *yaml.RNode if m.task.Eval.ConfigMap != nil { - if cm, err := kpt.NewConfigMap(m.task.Eval.ConfigMap); err != nil { + if cm, err := fnruntime.NewConfigMap(m.task.Eval.ConfigMap); err != nil { return repository.PackageResources{}, nil, fmt.Errorf("failed to create function config: %w", err) } else { functionConfig = cm diff --git a/porch/pkg/kpt/eval.go b/porch/pkg/kpt/eval.go index 26d2cfc899..549007ae63 100644 --- a/porch/pkg/kpt/eval.go +++ b/porch/pkg/kpt/eval.go @@ -23,7 +23,6 @@ import ( "github.com/GoogleContainerTools/kpt/porch/pkg/kpt/internal" "sigs.k8s.io/kustomize/kyaml/fn/framework" "sigs.k8s.io/kustomize/kyaml/kio" - "sigs.k8s.io/kustomize/kyaml/yaml" ) func NewSimpleFunctionRuntime() FunctionRuntime { @@ -67,22 +66,3 @@ func (fr *runner) Run(r io.Reader, w io.Writer) error { return framework.Execute(fr.processor, rw) } - -func NewConfigMap(data map[string]string) (*yaml.RNode, error) { - node := yaml.NewMapRNode(&data) - if node == nil { - return nil, nil - } - // create a ConfigMap only for configMap config - configMap := yaml.MustParse(` -apiVersion: v1 -kind: ConfigMap -metadata: - name: function-input -data: {} -`) - if err := configMap.PipeE(yaml.SetField("data", node)); err != nil { - return nil, err - } - return configMap, nil -} diff --git a/porch/pkg/kpt/eval_test.go b/porch/pkg/kpt/eval_test.go index 13ef58635b..bafe1789bc 100644 --- a/porch/pkg/kpt/eval_test.go +++ b/porch/pkg/kpt/eval_test.go @@ -20,6 +20,7 @@ import ( "path" "testing" + "github.com/GoogleContainerTools/kpt/internal/fnruntime" v1 "github.com/GoogleContainerTools/kpt/pkg/api/kptfile/v1" "sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/yaml" @@ -56,7 +57,7 @@ func TestSetLabels(t *testing.T) { t.Errorf("GetRunner failed: %v", err) } - config, err := NewConfigMap(map[string]string{ + config, err := fnruntime.NewConfigMap(map[string]string{ "label-key": "label-value", }) if err != nil { From 670dfaf6dcfe3415d7847e0f9cc3183da0a4530a Mon Sep 17 00:00:00 2001 From: natasha41575 Date: Mon, 23 May 2022 13:58:38 -0700 Subject: [PATCH 2/2] tag configMap data nodes as 'string' --- internal/fnruntime/utils.go | 8 ++++++++ internal/fnruntime/utils_test.go | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/fnruntime/utils.go b/internal/fnruntime/utils.go index cda6962f38..b41a362422 100644 --- a/internal/fnruntime/utils.go +++ b/internal/fnruntime/utils.go @@ -235,6 +235,14 @@ metadata: name: function-input data: {} `) + if err := node.VisitFields(func(node *yaml.MapNode) error { + v := node.Value.YNode() + v.Tag = yaml.NodeTagString + node.Value.SetYNode(v) + return nil + }); err != nil { + return nil, err + } if err := configMap.PipeE(yaml.SetField("data", node)); err != nil { return nil, err } diff --git a/internal/fnruntime/utils_test.go b/internal/fnruntime/utils_test.go index 1be89192f7..b2f57776e6 100644 --- a/internal/fnruntime/utils_test.go +++ b/internal/fnruntime/utils_test.go @@ -151,8 +151,8 @@ func TestNewConfigMap(t *testing.T) { m, err := NewConfigMap(data) assert.NoError(t, err) mapAsString := m.MustString() - assert.Contains(t, mapAsString, `bool: true`) + assert.Contains(t, mapAsString, `bool: "true"`) assert.Contains(t, mapAsString, `normal string: abc`) - assert.Contains(t, mapAsString, `integer: 8081`) - assert.Contains(t, mapAsString, `float: 1.23`) + assert.Contains(t, mapAsString, `integer: "8081"`) + assert.Contains(t, mapAsString, `float: "1.23"`) }