mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
ContainerPatch supports all common workload paths
This commit is contained in:
@@ -168,8 +168,7 @@ func (cpt ContainerPatchTemplate) apply(matches []*yaml.RNode) error {
|
||||
}
|
||||
|
||||
for i := range matches {
|
||||
// TODO(knverey): Make this work for more Kinds and expose the helper for doing so.
|
||||
containers, err := matches[i].Pipe(yaml.Lookup("spec", "template", "spec", "containers"))
|
||||
containers, err := matches[i].Pipe(yaml.LookupFirstMatch(yaml.ConventionalContainerPaths))
|
||||
if err != nil {
|
||||
return errors.Wrap(err)
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ package framework_test
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"regexp"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -276,6 +277,57 @@ functionConfig:
|
||||
`), strings.TrimSpace(out.String()))
|
||||
}
|
||||
|
||||
func TestTemplateProcessor_ContainerPatchTemplates_MultipleWorkloadKinds(t *testing.T) {
|
||||
type API struct {
|
||||
Spec struct {
|
||||
Key string `json:"key" yaml:"key"`
|
||||
Value string `json:"value" yaml:"value"`
|
||||
A string `json:"a" yaml:"a"`
|
||||
}
|
||||
}
|
||||
config := &API{}
|
||||
p := framework.TemplateProcessor{
|
||||
TemplateData: config,
|
||||
ResourceTemplates: []framework.ResourceTemplate{{
|
||||
Templates: parser.TemplateFiles("testdata/template-processor/templates/container-sources"),
|
||||
}},
|
||||
PatchTemplates: []framework.PatchTemplate{
|
||||
&framework.ContainerPatchTemplate{
|
||||
Templates: parser.TemplateFiles("testdata/template-processor/container-patches"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
out := new(bytes.Buffer)
|
||||
rw := &kio.ByteReadWriter{Writer: out, Reader: bytes.NewBufferString(`
|
||||
apiVersion: config.kubernetes.io/v1alpha1
|
||||
kind: ResourceList
|
||||
items: []
|
||||
functionConfig:
|
||||
spec:
|
||||
key: Hello
|
||||
value: World
|
||||
a: bar
|
||||
`)}
|
||||
|
||||
require.NoError(t, framework.Execute(p, rw))
|
||||
resources, err := (&kio.ByteReader{Reader: out}).Read()
|
||||
require.NoError(t, err)
|
||||
envRegex := regexp.MustCompile(strings.TrimSpace(`
|
||||
\s+ env:
|
||||
\s+ - name: EXISTING
|
||||
\s+ value: variable
|
||||
\s+ - name: Hello
|
||||
\s+ value: World
|
||||
`))
|
||||
require.Equal(t, 9, len(resources))
|
||||
for i, r := range resources {
|
||||
t.Run(r.GetKind(), func(t *testing.T) {
|
||||
assert.Regexp(t, envRegex, resources[i].MustString())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSimpleProcessor_Process_loads_config(t *testing.T) {
|
||||
cfg := new(struct {
|
||||
Value string `yaml:"value"`
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
schedule: "*/1 * * * *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
@@ -0,0 +1,23 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: DaemonSet
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
name: hello
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
name: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hello
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
16
kyaml/fn/framework/testdata/template-processor/templates/container-sources/job.template.yaml
vendored
Normal file
16
kyaml/fn/framework/testdata/template-processor/templates/container-sources/job.template.yaml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
14
kyaml/fn/framework/testdata/template-processor/templates/container-sources/pod.template.yaml
vendored
Normal file
14
kyaml/fn/framework/testdata/template-processor/templates/container-sources/pod.template.yaml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
@@ -0,0 +1,17 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: v1
|
||||
kind: PodTemplate
|
||||
metadata:
|
||||
name: hello
|
||||
labels:
|
||||
tier: hello
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
@@ -0,0 +1,22 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: ReplicaSet
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hello
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
@@ -0,0 +1,22 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: v1
|
||||
kind: ReplicationController
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
selector:
|
||||
app: hello
|
||||
template:
|
||||
metadata:
|
||||
name: hello
|
||||
labels:
|
||||
app: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
@@ -0,0 +1,24 @@
|
||||
# Copyright 2021 The Kubernetes Authors.
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: hello
|
||||
spec:
|
||||
serviceName: "nginx"
|
||||
selector:
|
||||
matchLabels:
|
||||
app: hello
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: hello
|
||||
spec:
|
||||
containers:
|
||||
- name: hello
|
||||
image: nginx
|
||||
env:
|
||||
- name: EXISTING
|
||||
value: variable
|
||||
|
||||
Reference in New Issue
Block a user