Merge pull request #3483 from msk-/master

Bug: configMapRefs in patches are not resolved correctly in diamond structure
This commit is contained in:
Jeff Regan
2021-01-27 15:43:49 -08:00
committed by GitHub

View File

@@ -0,0 +1,228 @@
// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package krusty_test
// In the following structure `top` patches `left-deploy` and `right-deploy` to reference the
// configMap in `bottom`. This test verifies `configMapRef.name` in `left-deploy` and
// `right-deploy` is modified correctly.
//
// top
// / \
// left right
// / \ / \
// left-service bottom bottom right-service
// | \ / |
// left-deploy bottom right-deploy
// |
// configMap
import (
"testing"
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
)
func TestConfMapNameResolutionInDiamondWithPatches(t *testing.T) {
th := kusttest_test.MakeHarness(t)
th.WriteK("bottom", `
configMapGenerator:
- name: bottom
literals:
- KEY=value
`)
th.WriteK("left-service", `
resources:
- deployment.yaml
`)
th.WriteF("left-service/deployment.yaml", `
apiVersion: apps/v1
kind: Deployment
metadata:
name: left-deploy
labels:
app.kubernetes.io/name: left-deploy
spec:
selector:
matchLabels:
app.kubernetes.io/name: left-pod
template:
metadata:
labels:
app.kubernetes.io/name: left-pod
spec:
containers:
- image: left-image:v1.0
name: service
`)
th.WriteK("right-service", `
resources:
- deployment.yaml
`)
th.WriteF("right-service/deployment.yaml", `
apiVersion: apps/v1
kind: Deployment
metadata:
name: right-deploy
labels:
app.kubernetes.io/name: right-deploy
spec:
selector:
matchLabels:
app.kubernetes.io/name: right-pod
template:
metadata:
labels:
app.kubernetes.io/name: right-pod
spec:
containers:
- image: right-image:v1.0
name: service
`)
th.WriteK("top", `
resources:
- ./left
- ./right
`)
th.WriteK("top/left", `
resources:
- ../../left-service
- ./bottom
patches:
- target:
kind: Deployment
name: left-deploy
patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: ignored-by-kustomize
spec:
template:
spec:
containers:
- name: service
env:
- name: MAPPED_CONFIG_ITEM
valueFrom:
configMapKeyRef:
name: left-bottom
key: KEY
`)
th.WriteK("top/left/bottom", `
namePrefix: left-
resources:
- ../../../bottom
`)
th.WriteK("top/right", `
resources:
- ../../right-service
- ./bottom
patches:
- target:
kind: Deployment
name: right-deploy
patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: ignored-by-kustomize
spec:
template:
spec:
containers:
- name: service
env:
- name: MAPPED_CONFIG_ITEM
valueFrom:
configMapKeyRef:
name: right-bottom
key: KEY
`)
th.WriteK("top/right/bottom", `
namePrefix: right-
resources:
- ../../../bottom
`)
m := th.Run("top", th.MakeDefaultOptions())
// Desired behaviour: configMapKeyRef should reference ConfigMap names.
th.AssertActualEqualsExpected(m, `apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: left-deploy
name: left-deploy
spec:
selector:
matchLabels:
app.kubernetes.io/name: left-pod
template:
metadata:
labels:
app.kubernetes.io/name: left-pod
spec:
containers:
- env:
- name: MAPPED_CONFIG_ITEM
valueFrom:
configMapKeyRef:
key: KEY
name: left-bottom
image: left-image:v1.0
name: service
---
apiVersion: v1
data:
KEY: value
kind: ConfigMap
metadata:
name: left-bottom-9f2t6f5h6d
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: right-deploy
name: right-deploy
spec:
selector:
matchLabels:
app.kubernetes.io/name: right-pod
template:
metadata:
labels:
app.kubernetes.io/name: right-pod
spec:
containers:
- env:
- name: MAPPED_CONFIG_ITEM
valueFrom:
configMapKeyRef:
key: KEY
name: right-bottom
image: right-image:v1.0
name: service
---
apiVersion: v1
data:
KEY: value
kind: ConfigMap
metadata:
name: right-bottom-9f2t6f5h6d
`)
}