Files
kustomize/plugin/someteam.example.com/v1/replacementtransformer/ReplacementTransformer_test.go
2019-11-11 09:06:51 -08:00

409 lines
7.3 KiB
Go

// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package main_test
import (
"testing"
"sigs.k8s.io/kustomize/api/testutils/kusttest"
)
func TestReplacementTransformer(t *testing.T) {
tc := kusttest_test.NewPluginTestEnv(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"someteam.example.com", "v1", "ReplacementTransformer")
th := kusttest_test.NewKustTestHarnessAllowPlugins(t, "/app")
rm := th.LoadAndRunTransformer(`
apiVersion: someteam.example.com/v1
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
value: nginx:newtag
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers[name=nginx-latest].image
- source:
value: postgres:latest
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers.3.image
`, `
group: apps
apiVersion: v1
kind: Deployment
metadata:
name: deploy1
spec:
template:
spec:
containers:
- image: nginx:1.7.9
name: nginx-tagged
- image: nginx:latest
name: nginx-latest
- image: foobar:1
name: replaced-with-digest
- image: postgres:1.8.0
name: postgresdb
initContainers:
- image: nginx
name: nginx-notag
- image: nginx@sha256:111111111111111111
name: nginx-sha256
- image: alpine:1.8.0
name: init-alpine
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: v1
group: apps
kind: Deployment
metadata:
name: deploy1
spec:
template:
spec:
containers:
- image: nginx:1.7.9
name: nginx-tagged
- image: nginx:newtag
name: nginx-latest
- image: foobar:1
name: replaced-with-digest
- image: postgres:latest
name: postgresdb
initContainers:
- image: nginx
name: nginx-notag
- image: nginx@sha256:111111111111111111
name: nginx-sha256
- image: alpine:1.8.0
name: init-alpine
`)
}
func TestReplacementTransformerComplexType(t *testing.T) {
tc := kusttest_test.NewPluginTestEnv(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"someteam.example.com", "v1", "ReplacementTransformer")
th := kusttest_test.NewKustTestHarnessAllowPlugins(t, "/app")
rm := th.LoadAndRunTransformer(`
apiVersion: someteam.example.com/v1
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
objref:
kind: Pod
name: pod
fieldref: spec.containers
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers
`, `
apiVersion: v1
kind: Pod
metadata:
name: pod
spec:
containers:
- name: myapp-container
image: busybox
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy2
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy3
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: v1
kind: Pod
metadata:
name: pod
spec:
containers:
- image: busybox
name: myapp-container
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy2
spec:
template:
spec:
containers:
- image: busybox
name: myapp-container
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy3
spec:
template:
spec:
containers:
- image: busybox
name: myapp-container
`)
}
func TestReplacementTransformerFromConfigMap(t *testing.T) {
tc := kusttest_test.NewPluginTestEnv(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"someteam.example.com", "v1", "ReplacementTransformer")
th := kusttest_test.NewKustTestHarnessAllowPlugins(t, "/app")
rm := th.LoadAndRunTransformer(`
apiVersion: someteam.example.com/v1
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
objref:
kind: ConfigMap
name: cm
fieldref: data.HOSTNAME
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers[image=debian].args.0
- spec.template.spec.containers[name=busybox].args.1
- source:
objref:
kind: ConfigMap
name: cm
fieldref: data.PORT
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers[image=debian].args.1
- spec.template.spec.containers[name=busybox].args.2
`, `
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy
labels:
foo: bar
spec:
template:
metadata:
labels:
foo: bar
spec:
containers:
- name: command-demo-container
image: debian
command: ["printenv"]
args:
- HOSTNAME
- PORT
- name: busybox
image: busybox:latest
args:
- echo
- HOSTNAME
- PORT
---
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
data:
HOSTNAME: example.com
PORT: 8080
`)
th.AssertActualEqualsExpected(rm, `
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
foo: bar
name: deploy
spec:
template:
metadata:
labels:
foo: bar
spec:
containers:
- args:
- example.com
- 8080
command:
- printenv
image: debian
name: command-demo-container
- args:
- echo
- example.com
- 8080
image: busybox:latest
name: busybox
---
apiVersion: v1
data:
HOSTNAME: example.com
PORT: 8080
kind: ConfigMap
metadata:
name: cm
`)
}
func TestReplacementTransformerWithDiamondShape(t *testing.T) {
tc := kusttest_test.NewPluginTestEnv(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"someteam.example.com", "v1", "ReplacementTransformer")
th := kusttest_test.NewKustTestHarnessAllowPlugins(t, "/app/combined")
th.WriteF("/app/base/deployment.yaml",
`
group: apps
apiVersion: v1
kind: Deployment
metadata:
name: deploy1
spec:
template:
spec:
containers:
- image: nginx:1.7.9
name: nginx
`)
th.WriteF("/app/base/kustomization.yaml",
`
resources:
- deployment.yaml
`)
th.WriteF("/app/a/kustomization.yaml",
`
nameprefix: a-
resources:
- ../base
transformers:
- replacement.yaml
`)
th.WriteF("/app/a/replacement.yaml",
`
apiVersion: someteam.example.com/v1
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
value: nginx:newtagA
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers[name=nginx].image
`)
th.WriteF("/app/b/kustomization.yaml",
`
nameprefix: b-
resources:
- ../base
transformers:
- replacement.yaml
`)
th.WriteF("/app/b/replacement.yaml",
`
apiVersion: someteam.example.com/v1
kind: ReplacementTransformer
metadata:
name: notImportantHere
replacements:
- source:
value: nginx:newtagB
target:
objref:
kind: Deployment
fieldrefs:
- spec.template.spec.containers[name=nginx].image
`)
th.WriteF("/app/combined/kustomization.yaml",
`
resources:
- ../a
- ../b
`)
m, err := th.MakeKustTarget().MakeCustomizedResMap()
if err != nil {
t.Fatalf("Err: %v", err)
}
th.AssertActualEqualsExpected(m, `
apiVersion: v1
group: apps
kind: Deployment
metadata:
name: a-deploy1
spec:
template:
spec:
containers:
- image: nginx:newtagA
name: nginx
---
apiVersion: v1
group: apps
kind: Deployment
metadata:
name: b-deploy1
spec:
template:
spec:
containers:
- image: nginx:newtagB
name: nginx
`)
}