mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
177 lines
3.6 KiB
Go
177 lines
3.6 KiB
Go
// Copyright 2021 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package krusty_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
|
)
|
|
|
|
// This is broken since kustomize v3.9.3.
|
|
// See https://github.com/kubernetes-sigs/kustomize/issues/3609 for details.
|
|
|
|
// Here is a structure of a kustomization of one resource inheriting from
|
|
// two bases. One of those bases is shared between the canary base and the
|
|
// final resource. This is named canary as it is a simple pattern to
|
|
// duplicate a resource that can be used with canary deployments.
|
|
//
|
|
// base
|
|
// | deployment.yaml
|
|
// | kustomization.yaml
|
|
// canary
|
|
// | deployment-canary-patch.yaml
|
|
// | kustomization.yaml
|
|
// mango
|
|
// | deployment-mango-patch.yaml
|
|
// | deployment-mango-canary-patch.yaml
|
|
// | kustomization.yaml
|
|
func TestRepeatBase(t *testing.T) {
|
|
th := kusttest_test.MakeHarness(t)
|
|
th.WriteK("base", `
|
|
resources:
|
|
- deployment.yaml
|
|
`)
|
|
th.WriteF("base/deployment.yaml", `
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: banana
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
component: banana
|
|
template:
|
|
metadata:
|
|
labels:
|
|
component: banana
|
|
spec:
|
|
containers:
|
|
- name: banana
|
|
image: image
|
|
`)
|
|
|
|
th.WriteK("canary", `
|
|
resources:
|
|
- ../base
|
|
patches:
|
|
- patch: |
|
|
- op: replace
|
|
path: /metadata/name
|
|
value: banana-canary
|
|
target:
|
|
kind: Deployment
|
|
- path: deployment-canary-patch.yaml
|
|
`)
|
|
th.WriteF("canary/deployment-canary-patch.yaml", `
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: banana-canary
|
|
labels:
|
|
type: canary
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
component: banana
|
|
type: canary
|
|
template:
|
|
metadata:
|
|
labels:
|
|
component: banana
|
|
type: canary
|
|
spec:
|
|
containers:
|
|
- name: banana
|
|
image: image-canary
|
|
`)
|
|
|
|
th.WriteK("mango", `
|
|
nameSuffix: -mango
|
|
resources:
|
|
- ../base
|
|
- ../canary
|
|
patches:
|
|
- path: deployment-mango-base-patch.yaml
|
|
- path: deployment-mango-canary-patch.yaml
|
|
`)
|
|
th.WriteF("mango/deployment-mango-base-patch.yaml", `
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: banana
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: banana
|
|
image: image-mango
|
|
`)
|
|
th.WriteF("mango/deployment-mango-canary-patch.yaml", `
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: banana-canary
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: banana
|
|
image: image-canary-mango
|
|
`)
|
|
|
|
err := th.RunWithErr("mango", th.MakeDefaultOptions())
|
|
if !strings.Contains(
|
|
err.Error(), "multiple matches for Id Deployment.v1.apps/banana.[noNs]; failed to find unique target for patch Deployment.v1.apps/banana.[noNs]") {
|
|
t.Fatalf("Unexpected err: %v", err)
|
|
}
|
|
|
|
// Uncomenting the following makes it work with kustomize v3.9.2 and bellow.
|
|
|
|
// m := th.Run("/app", th.MakeDefaultOptions())
|
|
// th.AssertActualEqualsExpected(m, `
|
|
//apiVersion: apps/v1
|
|
//kind: Deployment
|
|
//metadata:
|
|
// name: deployment-a
|
|
//spec:
|
|
// selector:
|
|
// matchLabels:
|
|
// component: deployment
|
|
// template:
|
|
// metadata:
|
|
// labels:
|
|
// component: deployment
|
|
// spec:
|
|
// containers:
|
|
// - image: image-a
|
|
// name: container-a
|
|
//---
|
|
//apiVersion: apps/v1
|
|
//kind: Deployment
|
|
//metadata:
|
|
// labels:
|
|
// type: canary
|
|
// name: deployment-canary-a
|
|
//spec:
|
|
// selector:
|
|
// matchLabels:
|
|
// component: deployment
|
|
// type: canary
|
|
// template:
|
|
// metadata:
|
|
// labels:
|
|
// component: deployment
|
|
// spec:
|
|
// containers:
|
|
// - image: image-canary-a
|
|
// name: container-a
|
|
// `)
|
|
}
|