mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
499 lines
8.2 KiB
Go
499 lines
8.2 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package krusty_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
. "sigs.k8s.io/kustomize/api/krusty"
|
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
|
"sigs.k8s.io/kustomize/api/types"
|
|
)
|
|
|
|
func TestOrderPreserved(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("base", `
|
|
namePrefix: b-
|
|
resources:
|
|
- namespace.yaml
|
|
- role.yaml
|
|
- service.yaml
|
|
- deployment.yaml
|
|
`)
|
|
th.WriteF("base/service.yaml", `
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: myService
|
|
`)
|
|
th.WriteF("base/namespace.yaml", `
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: myNs
|
|
`)
|
|
th.WriteF("base/role.yaml", `
|
|
apiVersion: v1
|
|
kind: Role
|
|
metadata:
|
|
name: myRole
|
|
`)
|
|
th.WriteF("base/deployment.yaml", `
|
|
apiVersion: v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDep
|
|
`)
|
|
th.WriteK("prod", `
|
|
namePrefix: p-
|
|
resources:
|
|
- ../base
|
|
- service.yaml
|
|
- namespace.yaml
|
|
`)
|
|
th.WriteF("prod/service.yaml", `
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: myService2
|
|
`)
|
|
th.WriteF("prod/namespace.yaml", `
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: myNs2
|
|
`)
|
|
m := th.Run("prod", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: myNs
|
|
---
|
|
apiVersion: v1
|
|
kind: Role
|
|
metadata:
|
|
name: p-b-myRole
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: p-b-myService
|
|
---
|
|
apiVersion: v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: p-b-myDep
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: p-myService2
|
|
---
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: myNs2
|
|
`)
|
|
}
|
|
|
|
func TestBaseInResourceList(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("prod", `
|
|
namePrefix: b-
|
|
resources:
|
|
- ../base
|
|
`)
|
|
th.WriteK("base", `
|
|
namePrefix: a-
|
|
resources:
|
|
- service.yaml
|
|
`)
|
|
th.WriteF("base/service.yaml", `
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: myService
|
|
spec:
|
|
selector:
|
|
backend: bungie
|
|
`)
|
|
m := th.Run("prod", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: b-a-myService
|
|
spec:
|
|
selector:
|
|
backend: bungie
|
|
`)
|
|
}
|
|
|
|
func TestTinyOverlay(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("base", `
|
|
namePrefix: a-
|
|
resources:
|
|
- deployment.yaml
|
|
`)
|
|
th.WriteF("base/deployment.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: whatever
|
|
`)
|
|
th.WriteK("overlay", `
|
|
namePrefix: b-
|
|
resources:
|
|
- ../base
|
|
patchesStrategicMerge:
|
|
- depPatch.yaml
|
|
`)
|
|
th.WriteF("overlay/depPatch.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
replicas: 999
|
|
`)
|
|
m := th.Run("overlay", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: b-a-myDeployment
|
|
spec:
|
|
replicas: 999
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: whatever
|
|
`)
|
|
}
|
|
|
|
func writeSmallBase(th kusttest_test.Harness) {
|
|
th.WriteK("base", `
|
|
namePrefix: a-
|
|
commonLabels:
|
|
app: myApp
|
|
resources:
|
|
- deployment.yaml
|
|
- service.yaml
|
|
`)
|
|
th.WriteF("base/service.yaml", `
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: myService
|
|
spec:
|
|
selector:
|
|
backend: bungie
|
|
ports:
|
|
- port: 7002
|
|
`)
|
|
th.WriteF("base/deployment.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
template:
|
|
metadata:
|
|
labels:
|
|
backend: awesome
|
|
spec:
|
|
containers:
|
|
- name: whatever
|
|
image: whatever
|
|
`)
|
|
}
|
|
|
|
func TestSmallBase(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
writeSmallBase(th)
|
|
m := th.Run("base", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
name: a-myDeployment
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app: myApp
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
backend: awesome
|
|
spec:
|
|
containers:
|
|
- image: whatever
|
|
name: whatever
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
name: a-myService
|
|
spec:
|
|
ports:
|
|
- port: 7002
|
|
selector:
|
|
app: myApp
|
|
backend: bungie
|
|
`)
|
|
}
|
|
|
|
func TestSmallOverlay(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
writeSmallBase(th)
|
|
th.WriteK("overlay", `
|
|
namePrefix: b-
|
|
commonLabels:
|
|
env: prod
|
|
quotedFruit: "peach"
|
|
quotedBoolean: "true"
|
|
resources:
|
|
- ../base
|
|
patchesStrategicMerge:
|
|
- deployment/deployment.yaml
|
|
images:
|
|
- name: whatever
|
|
newTag: 1.8.0
|
|
`)
|
|
|
|
th.WriteF("overlay/configmap/app.env", `
|
|
DB_USERNAME=admin
|
|
DB_PASSWORD=somepw
|
|
`)
|
|
th.WriteF("overlay/configmap/app-init.ini", `
|
|
FOO=bar
|
|
BAR=baz
|
|
`)
|
|
th.WriteF("overlay/deployment/deployment.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
replicas: 1000
|
|
`)
|
|
m := th.Run("overlay", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
env: prod
|
|
quotedBoolean: "true"
|
|
quotedFruit: peach
|
|
name: b-a-myDeployment
|
|
spec:
|
|
replicas: 1000
|
|
selector:
|
|
matchLabels:
|
|
app: myApp
|
|
env: prod
|
|
quotedBoolean: "true"
|
|
quotedFruit: peach
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
backend: awesome
|
|
env: prod
|
|
quotedBoolean: "true"
|
|
quotedFruit: peach
|
|
spec:
|
|
containers:
|
|
- image: whatever:1.8.0
|
|
name: whatever
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
env: prod
|
|
quotedBoolean: "true"
|
|
quotedFruit: peach
|
|
name: b-a-myService
|
|
spec:
|
|
ports:
|
|
- port: 7002
|
|
selector:
|
|
app: myApp
|
|
backend: bungie
|
|
env: prod
|
|
quotedBoolean: "true"
|
|
quotedFruit: peach
|
|
`)
|
|
}
|
|
|
|
func TestSharedPatchDisAllowed(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
writeSmallBase(th)
|
|
th.WriteK("overlay", `
|
|
commonLabels:
|
|
env: prod
|
|
resources:
|
|
- ../base
|
|
patchesStrategicMerge:
|
|
- ../shared/deployment-patch.yaml
|
|
`)
|
|
th.WriteF("shared/deployment-patch.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
replicas: 1000
|
|
`)
|
|
err := th.RunWithErr("overlay", func() Options {
|
|
o := th.MakeDefaultOptions()
|
|
o.LoadRestrictions = types.LoadRestrictionsRootOnly
|
|
return o
|
|
}())
|
|
if !strings.Contains(
|
|
err.Error(),
|
|
"security; file '/shared/deployment-patch.yaml' is not in or below '/overlay'") {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestSharedPatchAllowed(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
writeSmallBase(th)
|
|
th.WriteK("overlay", `
|
|
commonLabels:
|
|
env: prod
|
|
resources:
|
|
- ../base
|
|
patchesStrategicMerge:
|
|
- ../shared/deployment-patch.yaml
|
|
`)
|
|
th.WriteF("shared/deployment-patch.yaml", `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: myDeployment
|
|
spec:
|
|
replicas: 1000
|
|
`)
|
|
m := th.Run("overlay", func() Options {
|
|
o := th.MakeDefaultOptions()
|
|
o.LoadRestrictions = types.LoadRestrictionsNone
|
|
return o
|
|
}())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
env: prod
|
|
name: a-myDeployment
|
|
spec:
|
|
replicas: 1000
|
|
selector:
|
|
matchLabels:
|
|
app: myApp
|
|
env: prod
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
backend: awesome
|
|
env: prod
|
|
spec:
|
|
containers:
|
|
- image: whatever
|
|
name: whatever
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
env: prod
|
|
name: a-myService
|
|
spec:
|
|
ports:
|
|
- port: 7002
|
|
selector:
|
|
app: myApp
|
|
backend: bungie
|
|
env: prod
|
|
`)
|
|
}
|
|
|
|
func TestSmallOverlayJSONPatch(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
writeSmallBase(th)
|
|
th.WriteK("overlay", `
|
|
resources:
|
|
- ../base
|
|
patchesJson6902:
|
|
- target:
|
|
version: v1
|
|
kind: Service
|
|
name: a-myService
|
|
path: service-patch.yaml
|
|
`)
|
|
|
|
th.WriteF("overlay/service-patch.yaml", `
|
|
- op: add
|
|
path: /spec/selector/backend
|
|
value: beagle
|
|
`)
|
|
m := th.Run("overlay", th.MakeDefaultOptions())
|
|
th.AssertActualEqualsExpected(m, `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
name: a-myDeployment
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app: myApp
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
backend: awesome
|
|
spec:
|
|
containers:
|
|
- image: whatever
|
|
name: whatever
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
labels:
|
|
app: myApp
|
|
name: a-myService
|
|
spec:
|
|
ports:
|
|
- port: 7002
|
|
selector:
|
|
app: myApp
|
|
backend: beagle
|
|
`)
|
|
}
|