mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Fix 3424 by avoiding a JSON round trip
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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`)))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user