From fe30a9321ae026d9b5393abbf648fa1d56cb0a94 Mon Sep 17 00:00:00 2001 From: Chico Venancio Date: Mon, 15 Feb 2021 17:20:58 -0300 Subject: [PATCH 1/2] Adds repeatbase_test --- api/krusty/repeatbase_test.go | 180 ++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 api/krusty/repeatbase_test.go diff --git a/api/krusty/repeatbase_test.go b/api/krusty/repeatbase_test.go new file mode 100644 index 000000000..8e3d6864e --- /dev/null +++ b/api/krusty/repeatbase_test.go @@ -0,0 +1,180 @@ +// 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. +// +// deployment-base +// | deployment.yaml +// | kustomization.yaml +// deployment-canary +// | deployment-canary-patch.yaml +// | kustomization.yaml +// deployment-a +// | deployment-a-patch.yaml +// | kustomization.yaml +func TestRepeatBase(t *testing.T) { + th := kusttest_test.MakeHarness(t) + th.WriteK("/app/deployment-base", ` +resources: + - deployment.yaml +`) + th.WriteF("/app/deployment-base/deployment.yaml", ` +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: deployment +spec: + selector: + matchLabels: + component: deployment + template: + metadata: + labels: + component: deployment + spec: + containers: + - name: container-a + image: image +`) + + th.WriteK("/app/deployment-canary", ` +resources: + - ../deployment-base +patches: +- patch: | + - op: replace + path: /metadata/name + value: deployment-canary + target: + kind: Deployment +- path: deployment-canary-patch.yaml +`) + th.WriteF("/app/deployment-canary/deployment-canary-patch.yaml", ` +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: deployment-canary + labels: + type: canary +spec: + selector: + matchLabels: + component: deployment + type: canary + template: + metadata: + labels: + component: deployment + spec: + containers: + - name: container-a + image: image-canary +`) + + th.WriteK("/app/deployment-a", ` +nameSuffix: -a +resources: + - ../deployment-base + - ../deployment-canary +patches: +- path: deployment-a-base-patch.yaml +- path: deployment-a-canary-patch.yaml +`) + th.WriteF("/app/deployment-a/deployment-a-base-patch.yaml", ` +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: deployment +spec: + template: + spec: + containers: + - name: container-a + image: image-a +`) + th.WriteF("/app/deployment-a/deployment-a-canary-patch.yaml", ` +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: deployment-canary +spec: + template: + spec: + containers: + - name: container-a + image: image-canary-a +`) + + th.WriteK("/app", ` +resources: + - deployment-a +`) + + err := th.RunWithErr("/app", th.MakeDefaultOptions()) + if !strings.Contains( + err.Error(), "multiple matches for Id apps_v1_Deployment|~X|deployment; failed to find unique target for patch") { + 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 + //`) + +} From 6f15b1e56db1442bee0758d8eceb57077379cc43 Mon Sep 17 00:00:00 2001 From: Chico Venancio Date: Wed, 24 Feb 2021 15:05:24 -0300 Subject: [PATCH 2/2] Simplify paths and rename objects --- api/krusty/repeatbase_test.go | 75 +++++++++++++++++------------------ 1 file changed, 36 insertions(+), 39 deletions(-) diff --git a/api/krusty/repeatbase_test.go b/api/krusty/repeatbase_test.go index 8e3d6864e..c68a9dccd 100644 --- a/api/krusty/repeatbase_test.go +++ b/api/krusty/repeatbase_test.go @@ -18,120 +18,117 @@ import ( // final resource. This is named canary as it is a simple pattern to // duplicate a resource that can be used with canary deployments. // -// deployment-base +// base // | deployment.yaml // | kustomization.yaml -// deployment-canary +// canary // | deployment-canary-patch.yaml // | kustomization.yaml -// deployment-a -// | deployment-a-patch.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("/app/deployment-base", ` + th.WriteK("base", ` resources: - deployment.yaml `) - th.WriteF("/app/deployment-base/deployment.yaml", ` + th.WriteF("base/deployment.yaml", ` --- apiVersion: apps/v1 kind: Deployment metadata: - name: deployment + name: banana spec: selector: matchLabels: - component: deployment + component: banana template: metadata: labels: - component: deployment + component: banana spec: containers: - - name: container-a + - name: banana image: image `) - th.WriteK("/app/deployment-canary", ` + th.WriteK("canary", ` resources: - - ../deployment-base + - ../base patches: - patch: | - op: replace path: /metadata/name - value: deployment-canary + value: banana-canary target: kind: Deployment - path: deployment-canary-patch.yaml `) - th.WriteF("/app/deployment-canary/deployment-canary-patch.yaml", ` + th.WriteF("canary/deployment-canary-patch.yaml", ` --- apiVersion: apps/v1 kind: Deployment metadata: - name: deployment-canary + name: banana-canary labels: type: canary spec: selector: matchLabels: - component: deployment + component: banana type: canary template: metadata: labels: - component: deployment + component: banana + type: canary spec: containers: - - name: container-a + - name: banana image: image-canary `) - th.WriteK("/app/deployment-a", ` -nameSuffix: -a + th.WriteK("mango", ` +nameSuffix: -mango resources: - - ../deployment-base - - ../deployment-canary + - ../base + - ../canary patches: -- path: deployment-a-base-patch.yaml -- path: deployment-a-canary-patch.yaml +- path: deployment-mango-base-patch.yaml +- path: deployment-mango-canary-patch.yaml `) - th.WriteF("/app/deployment-a/deployment-a-base-patch.yaml", ` + th.WriteF("mango/deployment-mango-base-patch.yaml", ` --- apiVersion: apps/v1 kind: Deployment metadata: - name: deployment + name: banana spec: template: spec: containers: - - name: container-a - image: image-a + - name: banana + image: image-mango `) - th.WriteF("/app/deployment-a/deployment-a-canary-patch.yaml", ` + th.WriteF("mango/deployment-mango-canary-patch.yaml", ` --- apiVersion: apps/v1 kind: Deployment metadata: - name: deployment-canary + name: banana-canary spec: template: spec: containers: - - name: container-a - image: image-canary-a + - name: banana + image: image-canary-mango `) - th.WriteK("/app", ` -resources: - - deployment-a -`) - - err := th.RunWithErr("/app", th.MakeDefaultOptions()) + err := th.RunWithErr("mango", th.MakeDefaultOptions()) if !strings.Contains( - err.Error(), "multiple matches for Id apps_v1_Deployment|~X|deployment; failed to find unique target for patch") { + err.Error(), "multiple matches for Id apps_v1_Deployment|~X|banana; failed to find unique target for patch") { t.Fatalf("Unexpected err: %v", err) }