mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-09-18 13:22:17 +00:00
Add diamond base test.
This commit is contained in:
@@ -98,16 +98,17 @@ func (tf *transformer) Transform(m resmap.ResMap) error {
|
|||||||
|
|
||||||
func (tf *transformer) findPatchTarget(
|
func (tf *transformer) findPatchTarget(
|
||||||
m resmap.ResMap, id resid.ResId) (*resource.Resource, error) {
|
m resmap.ResMap, id resid.ResId) (*resource.Resource, error) {
|
||||||
match, err := m.GetByOriginalId(id)
|
match, err1 := m.GetByOriginalId(id)
|
||||||
if err == nil {
|
if err1 == nil {
|
||||||
return match, nil
|
return match, nil
|
||||||
}
|
}
|
||||||
match, err = m.GetByCurrentId(id)
|
match, err2 := m.GetByCurrentId(id)
|
||||||
if err == nil {
|
if err2 == nil {
|
||||||
return match, nil
|
return match, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf(
|
return nil, fmt.Errorf(
|
||||||
"failed to find target for patch %s", id.GvknString())
|
"%s; %s; failed to find unique target for patch %s",
|
||||||
|
err1.Error(), err2.Error(), id.GvknString())
|
||||||
}
|
}
|
||||||
|
|
||||||
// mergePatches merge and index patches by OrgId.
|
// mergePatches merge and index patches by OrgId.
|
||||||
|
|||||||
@@ -380,7 +380,7 @@ func TestPatchesWithWrongNamespace(t *testing.T) {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("did not get expected error")
|
t.Fatalf("did not get expected error")
|
||||||
}
|
}
|
||||||
if !strings.Contains(err.Error(), "failed to find target for patch") {
|
if !strings.Contains(err.Error(), "failed to find unique target for patch") {
|
||||||
t.Fatalf("expected error to contain %q but get %v", "failed to find target for patch", err)
|
t.Fatalf("expected error to contain %q but get %v", "failed to find target for patch", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
224
pkg/target/diamonds_test.go
Normal file
224
pkg/target/diamonds_test.go
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
// Copyright 2019 The Kubernetes Authors.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package target_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
kusttest_test "sigs.k8s.io/kustomize/v3/pkg/kusttest"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Here's a structure of two kustomizations,
|
||||||
|
// `dev` and `prod`, individually deployable,
|
||||||
|
// that depend on a diamond that combines
|
||||||
|
// multiple tenants (kirk, spock and bones),
|
||||||
|
// each sharing a common base.
|
||||||
|
//
|
||||||
|
// The objects used are contrived to avoid
|
||||||
|
// clouding the example with authentic
|
||||||
|
// but verbose Deployment boilerplate.
|
||||||
|
//
|
||||||
|
// Patches are applied at various levels,
|
||||||
|
// requiring more specificity as needed.
|
||||||
|
//
|
||||||
|
// dev prod
|
||||||
|
// \ /
|
||||||
|
// tenants
|
||||||
|
// / | \
|
||||||
|
// kirk spock bones
|
||||||
|
// \ | /
|
||||||
|
// base
|
||||||
|
//
|
||||||
|
func writeDiamondBase(th *kusttest_test.KustTestHarness) {
|
||||||
|
th.WriteK("/app/base", `
|
||||||
|
resources:
|
||||||
|
- deploy.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/base/deploy.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: storefront
|
||||||
|
spec:
|
||||||
|
numReplicas: 1
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeKirk(th *kusttest_test.KustTestHarness) {
|
||||||
|
th.WriteK("/app/kirk", `
|
||||||
|
namePrefix: kirk-
|
||||||
|
resources:
|
||||||
|
- ../base
|
||||||
|
- configmap.yaml
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- dep-patch.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/kirk/dep-patch.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: storefront
|
||||||
|
spec:
|
||||||
|
type: Confident
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/kirk/configmap.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: settings
|
||||||
|
data:
|
||||||
|
phaser: caress
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeSpock(th *kusttest_test.KustTestHarness) {
|
||||||
|
th.WriteK("/app/spock", `
|
||||||
|
namePrefix: spock-
|
||||||
|
resources:
|
||||||
|
- ../base
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- dep-patch.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/spock/dep-patch.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: storefront
|
||||||
|
spec:
|
||||||
|
type: Logical
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeBones(th *kusttest_test.KustTestHarness) {
|
||||||
|
th.WriteK("/app/bones", `
|
||||||
|
namePrefix: bones-
|
||||||
|
resources:
|
||||||
|
- ../base
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- dep-patch.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/bones/dep-patch.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: storefront
|
||||||
|
spec:
|
||||||
|
type: Concerned
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeTenants(th *kusttest_test.KustTestHarness) {
|
||||||
|
th.WriteK("/app/tenants", `
|
||||||
|
namePrefix: t-
|
||||||
|
resources:
|
||||||
|
- ../kirk
|
||||||
|
- ../spock
|
||||||
|
- ../bones
|
||||||
|
- configMap.yaml
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- bones-patch.yaml
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/tenants/bones-patch.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: bones-storefront
|
||||||
|
spec:
|
||||||
|
mood: Cantankerous
|
||||||
|
`)
|
||||||
|
th.WriteF("/app/tenants/configMap.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: federation
|
||||||
|
data:
|
||||||
|
zone: neutral
|
||||||
|
guardian: forever
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBasicDiamond(t *testing.T) {
|
||||||
|
th := kusttest_test.NewKustTestHarness(t, "/app/prod")
|
||||||
|
writeDiamondBase(th)
|
||||||
|
writeKirk(th)
|
||||||
|
writeSpock(th)
|
||||||
|
writeBones(th)
|
||||||
|
writeTenants(th)
|
||||||
|
th.WriteK("/app/prod", `
|
||||||
|
namePrefix: prod-
|
||||||
|
resources:
|
||||||
|
- ../tenants
|
||||||
|
patchesStrategicMerge:
|
||||||
|
- patches.yaml
|
||||||
|
`)
|
||||||
|
// The patch only has to be specific enough
|
||||||
|
// to match the item.
|
||||||
|
th.WriteF("/app/prod/patches.yaml", `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: t-kirk-storefront
|
||||||
|
spec:
|
||||||
|
numReplicas: 10000
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: federation
|
||||||
|
data:
|
||||||
|
guardian: ofTheGalaxy
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: t-federation
|
||||||
|
data:
|
||||||
|
zone: twilight
|
||||||
|
`)
|
||||||
|
|
||||||
|
m, err := th.MakeKustTarget().MakeCustomizedResMap()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Err: %v", err)
|
||||||
|
}
|
||||||
|
th.AssertActualEqualsExpected(m, `
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: prod-t-kirk-storefront
|
||||||
|
spec:
|
||||||
|
numReplicas: 10000
|
||||||
|
type: Confident
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
phaser: caress
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: prod-t-kirk-settings
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: prod-t-spock-storefront
|
||||||
|
spec:
|
||||||
|
numReplicas: 1
|
||||||
|
type: Logical
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: prod-t-bones-storefront
|
||||||
|
spec:
|
||||||
|
mood: Cantankerous
|
||||||
|
numReplicas: 1
|
||||||
|
type: Concerned
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
guardian: ofTheGalaxy
|
||||||
|
zone: twilight
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: prod-t-federation
|
||||||
|
`)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user