mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
Fix nil pointer dereferencing when converting vars to replacements (#5211)
* fix patch.Target is nil in writePatchTargets * add test case * lint * lint err not check * remove new lin in imports * rollback changes to `cmd :=` * remove extra lines
This commit is contained in:
@@ -134,7 +134,7 @@ func getNodesFromFile(fileName string, fSys filesys.FileSystem) ([]*kyaml.RNode,
|
|||||||
}
|
}
|
||||||
out := &bytes.Buffer{}
|
out := &bytes.Buffer{}
|
||||||
r := kio.ByteReadWriter{
|
r := kio.ByteReadWriter{
|
||||||
Reader: bytes.NewBufferString(string(b)),
|
Reader: bytes.NewBuffer(b),
|
||||||
Writer: out,
|
Writer: out,
|
||||||
KeepReaderAnnotations: true,
|
KeepReaderAnnotations: true,
|
||||||
OmitReaderAnnotations: true,
|
OmitReaderAnnotations: true,
|
||||||
@@ -284,7 +284,11 @@ func constructTargets(file string, node *kyaml.RNode, fieldPaths []string,
|
|||||||
func writePatchTargets(patch types.Patch, node *kyaml.RNode, fieldPaths []string,
|
func writePatchTargets(patch types.Patch, node *kyaml.RNode, fieldPaths []string,
|
||||||
options []*types.FieldOptions) ([]*types.TargetSelector, error) {
|
options []*types.FieldOptions) ([]*types.TargetSelector, error) {
|
||||||
var result []*types.TargetSelector
|
var result []*types.TargetSelector
|
||||||
selector := patch.Target.Copy()
|
|
||||||
|
selector := types.Selector{}
|
||||||
|
if patch.Target != nil {
|
||||||
|
selector = patch.Target.Copy()
|
||||||
|
}
|
||||||
|
|
||||||
for i := range fieldPaths {
|
for i := range fieldPaths {
|
||||||
target := &types.TargetSelector{
|
target := &types.TargetSelector{
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -119,7 +119,7 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -197,7 +197,7 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -276,7 +276,7 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -355,7 +355,7 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
err := cmd.RunE(cmd, nil)
|
err := cmd.RunE(cmd, nil)
|
||||||
@@ -412,8 +412,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
fSys.WriteFile("patch.yaml", patch)
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -533,8 +533,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
fSys.WriteFile("patch.yaml", patch)
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -657,8 +657,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
fSys.WriteFile("patch.yaml", patch)
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -780,8 +780,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
fSys.WriteFile("patch.yaml", patch)
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -910,8 +910,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
fSys.WriteFile("patch.yaml", patch)
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -1023,8 +1023,8 @@ spec:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomizationOverlay)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomizationOverlay)
|
||||||
fSys.WriteFile("base/pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("base/pod.yaml", pod))
|
||||||
fSys.WriteFile("base/kustomization.yaml", kustomizationBase)
|
assert.NoError(t, fSys.WriteFile("base/kustomization.yaml", kustomizationBase))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -1104,7 +1104,7 @@ metadata:
|
|||||||
|
|
||||||
fSys := filesys.MakeFsInMemory()
|
fSys := filesys.MakeFsInMemory()
|
||||||
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
fSys.WriteFile("pod.yaml", pod)
|
assert.NoError(t, fSys.WriteFile("pod.yaml", pod))
|
||||||
cmd := NewCmdFix(fSys, os.Stdout)
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
assert.NoError(t, cmd.RunE(cmd, nil))
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
@@ -1143,3 +1143,74 @@ metadata:
|
|||||||
a.b.c: SOME_SECRET_NAME_PLACEHOLDER
|
a.b.c: SOME_SECRET_NAME_PLACEHOLDER
|
||||||
`, string(content))
|
`, string(content))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFixVarsWithPatch(t *testing.T) {
|
||||||
|
kustomization := []byte(`
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- patch.yaml
|
||||||
|
|
||||||
|
vars:
|
||||||
|
- name: CERTIFICATE_NAMESPACE
|
||||||
|
objref:
|
||||||
|
name: system
|
||||||
|
fieldref:
|
||||||
|
fieldpath: metadata.namespace
|
||||||
|
`)
|
||||||
|
patch := []byte(`
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: controller-manager
|
||||||
|
namespace: system
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: $(CERTIFICATE_NAMESPACE)
|
||||||
|
`)
|
||||||
|
|
||||||
|
fSys := filesys.MakeFsInMemory()
|
||||||
|
testutils_test.WriteTestKustomizationWith(fSys, kustomization)
|
||||||
|
assert.NoError(t, fSys.WriteFile("patch.yaml", patch))
|
||||||
|
cmd := NewCmdFix(fSys, os.Stdout)
|
||||||
|
assert.NoError(t, cmd.Flags().Set("vars", "true"))
|
||||||
|
assert.NoError(t, cmd.RunE(cmd, nil))
|
||||||
|
content, err := testutils_test.ReadTestKustomization(fSys)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.Equal(t, `
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
|
||||||
|
patches:
|
||||||
|
- path: patch.yaml
|
||||||
|
replacements:
|
||||||
|
- source:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
name: system
|
||||||
|
targets:
|
||||||
|
- fieldPaths:
|
||||||
|
- spec.template.spec.containers.0.name
|
||||||
|
select:
|
||||||
|
namespace: system
|
||||||
|
`, string(content))
|
||||||
|
|
||||||
|
content, err = fSys.ReadFile("patch.yaml")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, `
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: controller-manager
|
||||||
|
namespace: system
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: CERTIFICATE_NAMESPACE_PLACEHOLDER
|
||||||
|
`, string(content))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user