Fix 3424 by avoiding a JSON round trip

This commit is contained in:
monopole
2021-01-08 17:26:33 -08:00
parent 497e8038a3
commit 14a1a0e4a8
4 changed files with 36 additions and 7 deletions

View File

@@ -4,6 +4,7 @@
package patchstrategicmerge package patchstrategicmerge
import ( import (
"sigs.k8s.io/kustomize/api/konfig"
"sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/kio"
"sigs.k8s.io/kustomize/kyaml/yaml" "sigs.k8s.io/kustomize/kyaml/yaml"
"sigs.k8s.io/kustomize/kyaml/yaml/merge2" "sigs.k8s.io/kustomize/kyaml/yaml/merge2"
@@ -28,7 +29,9 @@ func (pf Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
if !konfig.FlagEnableKyamlDefaultValue || r != nil {
result = append(result, r) result = append(result, r)
} }
}
return result, nil return result, nil
} }

View File

@@ -7,6 +7,7 @@ import (
"reflect" "reflect"
"testing" "testing"
"sigs.k8s.io/kustomize/api/konfig"
"sigs.k8s.io/kustomize/api/resid" "sigs.k8s.io/kustomize/api/resid"
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
resmaptest_test "sigs.k8s.io/kustomize/api/testutils/resmaptest" resmaptest_test "sigs.k8s.io/kustomize/api/testutils/resmaptest"
@@ -123,8 +124,18 @@ func TestRefVarTransformer(t *testing.T) {
"slice": []interface{}{5}, // noticeably *not* a []string "slice": []interface{}{5}, // noticeably *not* a []string
}}).ResMap(), }}).ResMap(),
}, },
errMessage: `obj '{"apiVersion": "v1", "data": {"slice": [5]}, "kind": "ConfigMap", "metadata": {"name": "cm1"}} errMessage: konfig.IfApiMachineryElseKyaml(
`obj '{"apiVersion": "v1", "data": {"slice": [5]}, "kind": "ConfigMap", "metadata": {"name": "cm1"}}
' at path 'data/slice': invalid value type expect a string`, ' at path 'data/slice': invalid value type expect a string`,
`obj 'apiVersion: v1
data:
slice:
- 5
kind: ConfigMap
metadata:
name: cm1
' at path 'data/slice': invalid value type expect a string`,
),
}, },
{ {
description: "var replacement in nil", description: "var replacement in nil",

View File

@@ -4,6 +4,7 @@
package krusty_test package krusty_test
import ( import (
"fmt"
"testing" "testing"
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest" kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
@@ -12,6 +13,7 @@ import (
// Demonstrate unwanted quotes added to an integer by a strategic merge patch. // Demonstrate unwanted quotes added to an integer by a strategic merge patch.
func TestIssue3424Basics(t *testing.T) { func TestIssue3424Basics(t *testing.T) {
th := kusttest_test.MakeHarness(t) th := kusttest_test.MakeHarness(t)
opts := th.MakeDefaultOptions()
th.WriteF("pdb-patch.yaml", ` th.WriteF("pdb-patch.yaml", `
apiVersion: policy/v1beta1 apiVersion: policy/v1beta1
kind: PodDisruptionBudget kind: PodDisruptionBudget
@@ -51,8 +53,8 @@ patches:
resources: resources:
- my_file.yaml - my_file.yaml
`) `)
m := th.Run(".", th.MakeDefaultOptions()) m := th.Run(".", opts)
th.AssertActualEqualsExpected(m, ` expFmt := `
apiVersion: policy/v1beta1 apiVersion: policy/v1beta1
kind: PodDisruptionBudget kind: PodDisruptionBudget
metadata: metadata:
@@ -60,7 +62,7 @@ metadata:
faceit-pdb: default faceit-pdb: default
name: championships-api name: championships-api
spec: spec:
maxUnavailable: "1" maxUnavailable: %s
--- ---
apiVersion: policy/v1beta1 apiVersion: policy/v1beta1
kind: PodDisruptionBudget kind: PodDisruptionBudget
@@ -69,6 +71,9 @@ metadata:
faceit-pdb: default faceit-pdb: default
name: championships-api-2 name: championships-api-2
spec: spec:
maxUnavailable: "1" maxUnavailable: %s
`) `
th.AssertActualEqualsExpected(m, opts.IfApiMachineryElseKyaml(
fmt.Sprintf(expFmt, `"1"`, `"1"`),
fmt.Sprintf(expFmt, `1`, `1`)))
} }

View File

@@ -10,10 +10,12 @@ import (
"sigs.k8s.io/kustomize/api/filters/patchstrategicmerge" "sigs.k8s.io/kustomize/api/filters/patchstrategicmerge"
"sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/ifc"
"sigs.k8s.io/kustomize/api/internal/wrappy"
"sigs.k8s.io/kustomize/api/resid" "sigs.k8s.io/kustomize/api/resid"
"sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/filtersutil" "sigs.k8s.io/kustomize/kyaml/filtersutil"
"sigs.k8s.io/kustomize/kyaml/kio" "sigs.k8s.io/kustomize/kyaml/kio"
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@@ -437,6 +439,14 @@ func (r *Resource) ApplySmPatch(patch *Resource) error {
} }
func (r *Resource) ApplyFilter(f kio.Filter) error { func (r *Resource) ApplyFilter(f kio.Filter) error {
if wn, ok := r.kunStr.(*wrappy.WNode); ok {
l, err := f.Filter([]*kyaml.RNode{wn.AsRNode()})
if len(l) == 0 {
// Hack to deal with deletion.
r.kunStr = wrappy.NewWNode()
}
return err
}
return filtersutil.ApplyToJSON(f, r) return filtersutil.ApplyToJSON(f, r)
} }