diff --git a/pkg/resid/resid.go b/pkg/resid/resid.go index 84d738d1b..47df4efc6 100644 --- a/pkg/resid/resid.go +++ b/pkg/resid/resid.go @@ -17,6 +17,7 @@ limitations under the License. package resid import ( + "fmt" "strings" "sigs.k8s.io/kustomize/pkg/gvk" @@ -134,6 +135,13 @@ func (n ResId) Name() string { return n.name } +// NameWithPrefixSuffix returns resource name with prefix and suffix. +func (n ResId) NameWithPrefixSuffix() string { + prefix := strings.Join(n.prefixList(), "") + suffix := strings.Join(n.suffixList(), "") + return fmt.Sprintf("%s%s%s", prefix, n.name, suffix) +} + // Prefix returns name prefix. func (n ResId) Prefix() string { return n.prefix diff --git a/pkg/target/kusttarget.go b/pkg/target/kusttarget.go index 5e43fc0aa..97985678a 100644 --- a/pkg/target/kusttarget.go +++ b/pkg/target/kusttarget.go @@ -284,7 +284,7 @@ func (kt *KustTarget) newTransformer(patches []*resource.Resource) (transformers string(kt.kustomization.Namespace), kt.tConfig.NameSpace)) t, err = transformers.NewNamePrefixSuffixTransformer( string(kt.kustomization.NamePrefix), - "", // TODO(zoncoen): pass the name suffix + string(kt.kustomization.NameSuffix), kt.tConfig.NamePrefix, ) if err != nil { diff --git a/pkg/target/kusttarget_test.go b/pkg/target/kusttarget_test.go index 4bc6dc18a..323dae50b 100644 --- a/pkg/target/kusttarget_test.go +++ b/pkg/target/kusttarget_test.go @@ -39,6 +39,7 @@ import ( const ( kustomizationContent1 = ` namePrefix: foo- +nameSuffix: -bar namespace: ns1 commonLabels: app: nginx @@ -132,12 +133,12 @@ var ns = gvk.Gvk{Version: "v1", Kind: "Namespace"} func TestResources1(t *testing.T) { expected := resmap.ResMap{ - resid.NewResIdWithPrefixNamespace(deploy, "dply1", "foo-", "ns1"): rf.RF().FromMap( + resid.NewResIdWithPrefixSuffixNamespace(deploy, "dply1", "foo-", "-bar", "ns1"): rf.RF().FromMap( map[string]interface{}{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": map[string]interface{}{ - "name": "foo-dply1", + "name": "foo-dply1-bar", "namespace": "ns1", "labels": map[string]interface{}{ "app": "nginx", @@ -165,12 +166,12 @@ func TestResources1(t *testing.T) { }, }, }), - resid.NewResIdWithPrefixNamespace(cmap, "literalConfigMap", "foo-", "ns1"): rf.RF().FromMap( + resid.NewResIdWithPrefixSuffixNamespace(cmap, "literalConfigMap", "foo-", "-bar", "ns1"): rf.RF().FromMap( map[string]interface{}{ "apiVersion": "v1", "kind": "ConfigMap", "metadata": map[string]interface{}{ - "name": "foo-literalConfigMap-mc92bgcbh5", + "name": "foo-literalConfigMap-bar-8d2dkb8k24", "namespace": "ns1", "labels": map[string]interface{}{ "app": "nginx", @@ -184,12 +185,12 @@ func TestResources1(t *testing.T) { "DB_PASSWORD": "somepw", }, }).SetBehavior(ifc.BehaviorCreate), - resid.NewResIdWithPrefixNamespace(secret, "secret", "foo-", "ns1"): rf.RF().FromMap( + resid.NewResIdWithPrefixSuffixNamespace(secret, "secret", "foo-", "-bar", "ns1"): rf.RF().FromMap( map[string]interface{}{ "apiVersion": "v1", "kind": "Secret", "metadata": map[string]interface{}{ - "name": "foo-secret-877fcfhgt5", + "name": "foo-secret-bar-9btc7bt4kb", "namespace": "ns1", "labels": map[string]interface{}{ "app": "nginx", @@ -204,12 +205,12 @@ func TestResources1(t *testing.T) { "DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")), }, }).SetBehavior(ifc.BehaviorCreate), - resid.NewResIdWithPrefixNamespace(ns, "ns1", "foo-", ""): rf.RF().FromMap( + resid.NewResIdWithPrefixSuffixNamespace(ns, "ns1", "foo-", "-bar", ""): rf.RF().FromMap( map[string]interface{}{ "apiVersion": "v1", "kind": "Namespace", "metadata": map[string]interface{}{ - "name": "foo-ns1", + "name": "foo-ns1-bar", "labels": map[string]interface{}{ "app": "nginx", }, @@ -270,8 +271,8 @@ func TestDisableNameSuffixHash(t *testing.T) { } for id, r := range actual { - if !strings.HasSuffix(r.GetName(), id.Name()) { - t.Fatalf("unexpected hash was added to %s: %s", id.Name(), r.GetName()) + if r.GetName() != id.NameWithPrefixSuffix() { + t.Errorf("unexpected hash was added to %s: %s", id.NameWithPrefixSuffix(), r.GetName()) } } } diff --git a/pkg/types/kustomization.go b/pkg/types/kustomization.go index bfa0037e3..e39268f3f 100644 --- a/pkg/types/kustomization.go +++ b/pkg/types/kustomization.go @@ -42,6 +42,10 @@ type Kustomization struct { // file including generated configmaps and secrets. NamePrefix string `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"` + // NameSuffix will suffix the names of all resources mentioned in the kustomization + // file including generated configmaps and secrets. + NameSuffix string `json:"nameSuffix,omitempty" yaml:"nameSuffix,omitempty"` + // Namespace to add to all objects. Namespace string `json:"namespace,omitempty" yaml:"namespace,omitempty"`