Merge pull request #76 from monopole/reduceUnstructNoise

Reduce unstruct notation noise in Resource construction.
This commit is contained in:
Jeff Regan
2018-06-10 09:46:53 -07:00
committed by GitHub
13 changed files with 908 additions and 1146 deletions

View File

@@ -27,7 +27,6 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
@@ -88,99 +87,91 @@ var ns = schema.GroupVersionKind{Version: "v1", Kind: "Namespace"}
func TestResources(t *testing.T) { func TestResources(t *testing.T) {
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(deploy, "dply1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "dply1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-dply1",
"name": "foo-dply1", "namespace": "ns1",
"namespace": "ns1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "app": "nginx",
},
"annotations": map[string]interface{}{
"note": "This is a test annotation",
},
},
"spec": map[string]interface{}{
"selector": map[string]interface{}{
"matchLabels": map[string]interface{}{
"app": "nginx", "app": "nginx",
}, },
"annotations": map[string]interface{}{
"note": "This is a test annotation",
},
}, },
"spec": map[string]interface{}{ "template": map[string]interface{}{
"selector": map[string]interface{}{ "metadata": map[string]interface{}{
"matchLabels": map[string]interface{}{ "annotations": map[string]interface{}{
"note": "This is a test annotation",
},
"labels": map[string]interface{}{
"app": "nginx", "app": "nginx",
}, },
}, },
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"annotations": map[string]interface{}{
"note": "This is a test annotation",
},
"labels": map[string]interface{}{
"app": "nginx",
},
},
},
}, },
}, },
}), }),
resource.NewResId(cmap, "literalConfigMap"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "literalConfigMap"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-literalConfigMap-mc92bgcbh5",
"name": "foo-literalConfigMap-mc92bgcbh5", "namespace": "ns1",
"namespace": "ns1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "app": "nginx",
"app": "nginx",
},
"annotations": map[string]interface{}{
"note": "This is a test annotation",
},
"creationTimestamp": nil,
}, },
"data": map[string]interface{}{ "annotations": map[string]interface{}{
"DB_USERNAME": "admin", "note": "This is a test annotation",
"DB_PASSWORD": "somepw",
}, },
"creationTimestamp": nil,
},
"data": map[string]interface{}{
"DB_USERNAME": "admin",
"DB_PASSWORD": "somepw",
}, },
}), }),
resource.NewResId(secret, "secret"): resource.NewBehaviorlessResource( resource.NewResId(secret, "secret"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-secret-877fcfhgt5",
"name": "foo-secret-877fcfhgt5", "namespace": "ns1",
"namespace": "ns1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "app": "nginx",
"app": "nginx",
},
"annotations": map[string]interface{}{
"note": "This is a test annotation",
},
"creationTimestamp": nil,
}, },
"type": string(corev1.SecretTypeOpaque), "annotations": map[string]interface{}{
"data": map[string]interface{}{ "note": "This is a test annotation",
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
}, },
"creationTimestamp": nil,
},
"type": string(corev1.SecretTypeOpaque),
"data": map[string]interface{}{
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
}, },
}), }),
resource.NewResId(ns, "ns1"): resource.NewBehaviorlessResource( resource.NewResId(ns, "ns1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Namespace",
"kind": "Namespace", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-ns1",
"name": "foo-ns1", "namespace": "ns1",
"namespace": "ns1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "app": "nginx",
"app": "nginx", },
}, "annotations": map[string]interface{}{
"annotations": map[string]interface{}{ "note": "This is a test annotation",
"note": "This is a test annotation",
},
}, },
}, },
}), }),
@@ -203,24 +194,20 @@ func TestResources(t *testing.T) {
func TestRawResources(t *testing.T) { func TestRawResources(t *testing.T) {
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(deploy, "dply1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "dply1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "dply1",
"name": "dply1",
},
}, },
}), }),
resource.NewResId(ns, "ns1"): resource.NewBehaviorlessResource( resource.NewResId(ns, "ns1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Namespace",
"kind": "Namespace", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "ns1",
"name": "ns1",
},
}, },
}), }),
} }

View File

@@ -23,7 +23,6 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/internal/loadertest" "github.com/kubernetes-sigs/kustomize/pkg/internal/loadertest"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"github.com/kubernetes-sigs/kustomize/pkg/types" "github.com/kubernetes-sigs/kustomize/pkg/types"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
@@ -53,19 +52,17 @@ func TestNewFromConfigMaps(t *testing.T) {
filepath: "/home/seans/project/app.env", filepath: "/home/seans/project/app.env",
content: "DB_USERNAME=admin\nDB_PASSWORD=somepw", content: "DB_USERNAME=admin\nDB_PASSWORD=somepw",
expected: ResMap{ expected: ResMap{
resource.NewResId(cmap, "envConfigMap"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "envConfigMap"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "envConfigMap",
"name": "envConfigMap", "creationTimestamp": nil,
"creationTimestamp": nil, },
}, "data": map[string]interface{}{
"data": map[string]interface{}{ "DB_USERNAME": "admin",
"DB_USERNAME": "admin", "DB_PASSWORD": "somepw",
"DB_PASSWORD": "somepw",
},
}, },
}), }),
}, },
@@ -82,20 +79,18 @@ func TestNewFromConfigMaps(t *testing.T) {
filepath: "/home/seans/project/app-init.ini", filepath: "/home/seans/project/app-init.ini",
content: "FOO=bar\nBAR=baz\n", content: "FOO=bar\nBAR=baz\n",
expected: ResMap{ expected: ResMap{
resource.NewResId(cmap, "fileConfigMap"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "fileConfigMap"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "fileConfigMap",
"name": "fileConfigMap", "creationTimestamp": nil,
"creationTimestamp": nil, },
}, "data": map[string]interface{}{
"data": map[string]interface{}{ "app-init.ini": `FOO=bar
"app-init.ini": `FOO=bar
BAR=baz BAR=baz
`, `,
},
}, },
}), }),
}, },
@@ -111,19 +106,17 @@ BAR=baz
}, },
}, },
expected: ResMap{ expected: ResMap{
resource.NewResId(cmap, "literalConfigMap"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "literalConfigMap"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "literalConfigMap",
"name": "literalConfigMap", "creationTimestamp": nil,
"creationTimestamp": nil, },
}, "data": map[string]interface{}{
"data": map[string]interface{}{ "a": "x",
"a": "x", "b": "y",
"b": "y",
},
}, },
}), }),
}, },

View File

@@ -101,7 +101,7 @@ func (m ResMap) insert(newName string, obj *unstructured.Unstructured) error {
return fmt.Errorf("The <name: %q, GroupVersionKind: %v> already exists in the map", oldName, gvk) return fmt.Errorf("The <name: %q, GroupVersionKind: %v> already exists in the map", oldName, gvk)
} }
obj.SetName(newName) obj.SetName(newName)
m[id] = resource.NewBehaviorlessResource(obj) m[id] = resource.NewResourceFromUnstruct(*obj)
return nil return nil
} }
@@ -183,7 +183,7 @@ func newResourceSliceFromBytes(in []byte) ([]*resource.Resource, error) {
if err != nil { if err != nil {
break break
} }
result = append(result, resource.NewBehaviorlessResource(&out)) result = append(result, resource.NewResourceFromUnstruct(out))
} }
if err != io.EOF { if err != io.EOF {
return nil, err return nil, err

View File

@@ -23,7 +23,6 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/internal/loadertest" "github.com/kubernetes-sigs/kustomize/pkg/internal/loadertest"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
@@ -42,24 +41,20 @@ metadata:
name: cm2 name: cm2
`) `)
input := ResMap{ input := ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm2",
"name": "cm2",
},
}, },
}), }),
} }
@@ -89,24 +84,20 @@ metadata:
if ferr := l.AddFile("/home/seans/project/deployment.yaml", []byte(resourceStr)); ferr != nil { if ferr := l.AddFile("/home/seans/project/deployment.yaml", []byte(resourceStr)); ferr != nil {
t.Fatalf("Error adding fake file: %v\n", ferr) t.Fatalf("Error adding fake file: %v\n", ferr)
} }
expected := ResMap{resource.NewResId(deploy, "dply1"): resource.NewBehaviorlessResource( expected := ResMap{resource.NewResId(deploy, "dply1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "dply1",
},
}),
resource.NewResId(deploy, "dply2"): resource.NewResourceFromMap(
map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"name": "dply1", "name": "dply2",
},
},
}),
resource.NewResId(deploy, "dply2"): resource.NewBehaviorlessResource(
&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "dply2",
},
}, },
}), }),
} }
@@ -133,24 +124,20 @@ metadata:
name: cm2 name: cm2
`) `)
expected := ResMap{ expected := ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm2",
"name": "cm2",
},
}, },
}), }),
} }
@@ -166,49 +153,41 @@ metadata:
func TestMerge(t *testing.T) { func TestMerge(t *testing.T) {
input1 := ResMap{ input1 := ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-deploy1",
"name": "foo-deploy1",
},
}, },
}), }),
} }
input2 := ResMap{ input2 := ResMap{
resource.NewResId(statefulset, "stateful1"): resource.NewBehaviorlessResource( resource.NewResId(statefulset, "stateful1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "StatefulSet",
"kind": "StatefulSet", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "bar-stateful",
"name": "bar-stateful",
},
}, },
}), }),
} }
input := []ResMap{input1, input2} input := []ResMap{input1, input2}
expected := ResMap{ expected := ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "foo-deploy1",
"name": "foo-deploy1",
},
}, },
}), }),
resource.NewResId(statefulset, "stateful1"): resource.NewBehaviorlessResource( resource.NewResId(statefulset, "stateful1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "StatefulSet",
"kind": "StatefulSet", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "bar-stateful",
"name": "bar-stateful",
},
}, },
}), }),
} }

View File

@@ -24,7 +24,6 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"github.com/kubernetes-sigs/kustomize/pkg/types" "github.com/kubernetes-sigs/kustomize/pkg/types"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
@@ -48,20 +47,18 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
} }
expected := ResMap{ expected := ResMap{
resource.NewResId(secret, "apple"): resource.NewBehaviorlessResource( resource.NewResId(secret, "apple"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "apple",
"name": "apple", "creationTimestamp": nil,
"creationTimestamp": nil, },
}, "type": string(corev1.SecretTypeOpaque),
"type": string(corev1.SecretTypeOpaque), "data": map[string]interface{}{
"data": map[string]interface{}{ "DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")),
"DB_USERNAME": base64.StdEncoding.EncodeToString([]byte("admin")), "DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
"DB_PASSWORD": base64.StdEncoding.EncodeToString([]byte("somepw")),
},
}, },
}), }),
} }

View File

@@ -46,16 +46,14 @@ func NewResourceWithBehavior(obj runtime.Object, b GenerationBehavior) (*Resourc
return &Resource{Unstructured: u, b: b}, nil return &Resource{Unstructured: u, b: b}, nil
} }
// NewBehaviorlessResource returns a new instance of Resource. // NewResourceFromMap returns a new instance of Resource.
func NewBehaviorlessResource(u *unstructured.Unstructured) *Resource { func NewResourceFromMap(m map[string]interface{}) *Resource {
return &Resource{Unstructured: *u, b: BehaviorUnspecified} return NewResourceFromUnstruct(unstructured.Unstructured{Object: m})
} }
// NewResource returns a new instance of Resource. // NewResourceFromUnstruct returns a new instance of Resource.
func NewResource(m map[string]interface{}) *Resource { func NewResourceFromUnstruct(u unstructured.Unstructured) *Resource {
return &Resource{ return &Resource{Unstructured: u, b: BehaviorUnspecified}
Unstructured: unstructured.Unstructured{Object: m},
b: BehaviorUnspecified}
} }
// Behavior returns the behavior for the resource. // Behavior returns the behavior for the resource.

View File

@@ -21,7 +21,7 @@ import (
) )
func TestGetFieldValue(t *testing.T) { func TestGetFieldValue(t *testing.T) {
res := NewResource(map[string]interface{}{ res := NewResourceFromMap(map[string]interface{}{
"Kind": "Service", "Kind": "Service",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"labels": map[string]string{ "labels": map[string]string{

View File

@@ -22,7 +22,6 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
) )
@@ -35,141 +34,129 @@ var foo = schema.GroupVersionKind{Group: "example.com", Version: "v1", Kind: "Fo
func TestLabelsRun(t *testing.T) { func TestLabelsRun(t *testing.T) {
m := resmap.ResMap{ m := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "labels": map[string]interface{}{
"labels": map[string]interface{}{ "old-label": "old-value",
"old-label": "old-value",
},
}, },
"spec": map[string]interface{}{ },
"containers": []interface{}{ "spec": map[string]interface{}{
map[string]interface{}{ "containers": []interface{}{
"name": "nginx", map[string]interface{}{
"image": "nginx:1.7.9", "name": "nginx",
}, "image": "nginx:1.7.9",
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "ports": []interface{}{
"ports": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "port1",
"name": "port1", "port": "12345",
"port": "12345",
},
}, },
}, },
}, },
}), }),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "label-key1": "label-value1",
"label-key1": "label-value1", "label-key2": "label-value2",
"label-key2": "label-value2",
},
}, },
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "label-key1": "label-value1",
"label-key2": "label-value2",
},
},
"spec": map[string]interface{}{
"selector": map[string]interface{}{
"matchLabels": map[string]interface{}{
"label-key1": "label-value1", "label-key1": "label-value1",
"label-key2": "label-value2", "label-key2": "label-value2",
}, },
}, },
"spec": map[string]interface{}{ "template": map[string]interface{}{
"selector": map[string]interface{}{ "metadata": map[string]interface{}{
"matchLabels": map[string]interface{}{ "labels": map[string]interface{}{
"old-label": "old-value",
"label-key1": "label-value1", "label-key1": "label-value1",
"label-key2": "label-value2", "label-key2": "label-value2",
}, },
}, },
"template": map[string]interface{}{ "spec": map[string]interface{}{
"metadata": map[string]interface{}{ "containers": []interface{}{
"labels": map[string]interface{}{ map[string]interface{}{
"old-label": "old-value", "name": "nginx",
"label-key1": "label-value1", "image": "nginx:1.7.9",
"label-key2": "label-value2",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:1.7.9",
},
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", "labels": map[string]interface{}{
"labels": map[string]interface{}{ "label-key1": "label-value1",
"label-key1": "label-value1", "label-key2": "label-value2",
"label-key2": "label-value2", },
},
"spec": map[string]interface{}{
"ports": []interface{}{
map[string]interface{}{
"name": "port1",
"port": "12345",
}, },
}, },
"spec": map[string]interface{}{ "selector": map[string]interface{}{
"ports": []interface{}{ "label-key1": "label-value1",
map[string]interface{}{ "label-key2": "label-value2",
"name": "port1",
"port": "12345",
},
},
"selector": map[string]interface{}{
"label-key1": "label-value1",
"label-key2": "label-value2",
},
}, },
}, },
}), }),
@@ -189,212 +176,122 @@ func TestLabelsRun(t *testing.T) {
} }
} }
func makeAnnotatededConfigMap() *unstructured.Unstructured {
return &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "v1",
"kind": "ConfigMap",
"metadata": map[string]interface{}{
"name": "cm1",
"annotations": map[string]interface{}{
"anno-key1": "anno-value1",
"anno-key2": "anno-value2",
},
},
},
}
}
func makeAnnotatededDeployment() *unstructured.Unstructured {
return &unstructured.Unstructured{
Object: map[string]interface{}{
"group": "apps",
"apiVersion": "v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
"annotations": map[string]interface{}{
"anno-key1": "anno-value1",
"anno-key2": "anno-value2",
},
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"annotations": map[string]interface{}{
"anno-key1": "anno-value1",
"anno-key2": "anno-value2",
},
"labels": map[string]interface{}{
"old-label": "old-value",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:1.7.9",
},
},
},
},
},
},
}
}
func makeAnnotatededService() *unstructured.Unstructured {
return &unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "v1",
"kind": "Service",
"metadata": map[string]interface{}{
"name": "svc1",
"annotations": map[string]interface{}{
"anno-key1": "anno-value1",
"anno-key2": "anno-value2",
},
},
"spec": map[string]interface{}{
"ports": []interface{}{
map[string]interface{}{
"name": "port1",
"port": "12345",
},
},
},
},
}
}
func TestAnnotationsRun(t *testing.T) { func TestAnnotationsRun(t *testing.T) {
m := resmap.ResMap{ m := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "labels": map[string]interface{}{
"labels": map[string]interface{}{ "old-label": "old-value",
"old-label": "old-value",
},
}, },
"spec": map[string]interface{}{ },
"containers": []interface{}{ "spec": map[string]interface{}{
map[string]interface{}{ "containers": []interface{}{
"name": "nginx", map[string]interface{}{
"image": "nginx:1.7.9", "name": "nginx",
}, "image": "nginx:1.7.9",
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "ports": []interface{}{
"ports": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "port1",
"name": "port1", "port": "12345",
"port": "12345",
},
}, },
}, },
}, },
}), }),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1", "annotations": map[string]interface{}{
"annotations": map[string]interface{}{ "anno-key1": "anno-value1",
"anno-key1": "anno-value1", "anno-key2": "anno-value2",
"anno-key2": "anno-value2",
},
}, },
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", "annotations": map[string]interface{}{
"annotations": map[string]interface{}{ "anno-key1": "anno-value1",
"anno-key1": "anno-value1", "anno-key2": "anno-value2",
"anno-key2": "anno-value2",
},
}, },
"spec": map[string]interface{}{ },
"template": map[string]interface{}{ "spec": map[string]interface{}{
"metadata": map[string]interface{}{ "template": map[string]interface{}{
"annotations": map[string]interface{}{ "metadata": map[string]interface{}{
"anno-key1": "anno-value1", "annotations": map[string]interface{}{
"anno-key2": "anno-value2", "anno-key1": "anno-value1",
}, "anno-key2": "anno-value2",
"labels": map[string]interface{}{
"old-label": "old-value",
},
}, },
"spec": map[string]interface{}{ "labels": map[string]interface{}{
"containers": []interface{}{ "old-label": "old-value",
map[string]interface{}{ },
"name": "nginx", },
"image": "nginx:1.7.9", "spec": map[string]interface{}{
}, "containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:1.7.9",
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", "annotations": map[string]interface{}{
"annotations": map[string]interface{}{ "anno-key1": "anno-value1",
"anno-key1": "anno-value1", "anno-key2": "anno-value2",
"anno-key2": "anno-value2",
},
}, },
"spec": map[string]interface{}{ },
"ports": []interface{}{ "spec": map[string]interface{}{
map[string]interface{}{ "ports": []interface{}{
"name": "port1", map[string]interface{}{
"port": "12345", "name": "port1",
}, "port": "12345",
}, },
}, },
}, },

View File

@@ -22,144 +22,127 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
) )
func TestNameHashTransformer(t *testing.T) { func TestNameHashTransformer(t *testing.T) {
objs := resmap.ResMap{ objs := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "labels": map[string]interface{}{
"labels": map[string]interface{}{ "old-label": "old-value",
"old-label": "old-value",
},
}, },
"spec": map[string]interface{}{ },
"containers": []interface{}{ "spec": map[string]interface{}{
map[string]interface{}{ "containers": []interface{}{
"name": "nginx", map[string]interface{}{
"image": "nginx:1.7.9", "name": "nginx",
}, "image": "nginx:1.7.9",
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "ports": []interface{}{
"ports": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "port1",
"name": "port1", "port": "12345",
"port": "12345",
},
}, },
}, },
}, },
}), }),
resource.NewResId(secret, "secret1"): resource.NewBehaviorlessResource( resource.NewResId(secret, "secret1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "secret1",
"name": "secret1",
},
}, },
}), }),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1-m462kdfb68",
"name": "cm1-m462kdfb68",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "labels": map[string]interface{}{
"labels": map[string]interface{}{ "old-label": "old-value",
"old-label": "old-value",
},
}, },
"spec": map[string]interface{}{ },
"containers": []interface{}{ "spec": map[string]interface{}{
map[string]interface{}{ "containers": []interface{}{
"name": "nginx", map[string]interface{}{
"image": "nginx:1.7.9", "name": "nginx",
}, "image": "nginx:1.7.9",
}, },
}, },
}, },
}, },
}, },
}), }),
resource.NewResId(service, "svc1"): resource.NewBehaviorlessResource( resource.NewResId(service, "svc1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Service",
"kind": "Service", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "svc1",
"name": "svc1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "ports": []interface{}{
"ports": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "port1",
"name": "port1", "port": "12345",
"port": "12345",
},
}, },
}, },
}, },
}), }),
resource.NewResId(secret, "secret1"): resource.NewBehaviorlessResource( resource.NewResId(secret, "secret1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "secret1-7kc45hd5f7",
"name": "secret1-7kc45hd5f7",
},
}, },
}), }),
} }

View File

@@ -22,90 +22,83 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
) )
func TestNameReferenceRun(t *testing.T) { func TestNameReferenceRun(t *testing.T) {
m := resmap.ResMap{ m := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-cm1-somehash",
"name": "someprefix-cm1-somehash",
},
}, },
}), }),
resource.NewResId(secret, "secret1"): resource.NewBehaviorlessResource( resource.NewResId(secret, "secret1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-secret1-somehash",
"name": "someprefix-secret1-somehash",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "spec": map[string]interface{}{
"spec": map[string]interface{}{ "containers": []interface{}{
"containers": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "nginx",
"name": "nginx", "image": "nginx:1.7.9",
"image": "nginx:1.7.9", "env": []interface{}{
"env": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "CM_FOO",
"name": "CM_FOO", "valueFrom": map[string]interface{}{
"valueFrom": map[string]interface{}{ "configMapKeyRef": map[string]interface{}{
"configMapKeyRef": map[string]interface{}{
"name": "cm1",
"key": "somekey",
},
},
},
map[string]interface{}{
"name": "SECRET_FOO",
"valueFrom": map[string]interface{}{
"secretKeyRef": map[string]interface{}{
"name": "secret1",
"key": "somekey",
},
},
},
},
"envFrom": []interface{}{
map[string]interface{}{
"configMapRef": map[string]interface{}{
"name": "cm1", "name": "cm1",
"key": "somekey", "key": "somekey",
}, },
}, },
map[string]interface{}{ },
"secretRef": map[string]interface{}{ map[string]interface{}{
"name": "SECRET_FOO",
"valueFrom": map[string]interface{}{
"secretKeyRef": map[string]interface{}{
"name": "secret1", "name": "secret1",
"key": "somekey", "key": "somekey",
}, },
}, },
}, },
}, },
"envFrom": []interface{}{
map[string]interface{}{
"configMapRef": map[string]interface{}{
"name": "cm1",
"key": "somekey",
},
},
map[string]interface{}{
"secretRef": map[string]interface{}{
"name": "secret1",
"key": "somekey",
},
},
},
}, },
"volumes": map[string]interface{}{ },
"configMap": map[string]interface{}{ "volumes": map[string]interface{}{
"name": "cm1", "configMap": map[string]interface{}{
}, "name": "cm1",
"secret": map[string]interface{}{ },
"secretName": "secret1", "secret": map[string]interface{}{
}, "secretName": "secret1",
}, },
}, },
}, },
@@ -115,85 +108,79 @@ func TestNameReferenceRun(t *testing.T) {
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-cm1-somehash",
"name": "someprefix-cm1-somehash",
},
}, },
}), }),
resource.NewResId(secret, "secret1"): resource.NewBehaviorlessResource( resource.NewResId(secret, "secret1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "Secret",
"kind": "Secret", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-secret1-somehash",
"name": "someprefix-secret1-somehash",
},
}, },
}), }),
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "group": "apps",
"group": "apps", "apiVersion": "v1",
"apiVersion": "v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "spec": map[string]interface{}{
"spec": map[string]interface{}{ "containers": []interface{}{
"containers": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "nginx",
"name": "nginx", "image": "nginx:1.7.9",
"image": "nginx:1.7.9", "env": []interface{}{
"env": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "CM_FOO",
"name": "CM_FOO", "valueFrom": map[string]interface{}{
"valueFrom": map[string]interface{}{ "configMapKeyRef": map[string]interface{}{
"configMapKeyRef": map[string]interface{}{
"name": "someprefix-cm1-somehash",
"key": "somekey",
},
},
},
map[string]interface{}{
"name": "SECRET_FOO",
"valueFrom": map[string]interface{}{
"secretKeyRef": map[string]interface{}{
"name": "someprefix-secret1-somehash",
"key": "somekey",
},
},
},
},
"envFrom": []interface{}{
map[string]interface{}{
"configMapRef": map[string]interface{}{
"name": "someprefix-cm1-somehash", "name": "someprefix-cm1-somehash",
"key": "somekey", "key": "somekey",
}, },
}, },
map[string]interface{}{ },
"secretRef": map[string]interface{}{ map[string]interface{}{
"name": "SECRET_FOO",
"valueFrom": map[string]interface{}{
"secretKeyRef": map[string]interface{}{
"name": "someprefix-secret1-somehash", "name": "someprefix-secret1-somehash",
"key": "somekey", "key": "somekey",
}, },
}, },
}, },
}, },
"envFrom": []interface{}{
map[string]interface{}{
"configMapRef": map[string]interface{}{
"name": "someprefix-cm1-somehash",
"key": "somekey",
},
},
map[string]interface{}{
"secretRef": map[string]interface{}{
"name": "someprefix-secret1-somehash",
"key": "somekey",
},
},
},
}, },
"volumes": map[string]interface{}{ },
"configMap": map[string]interface{}{ "volumes": map[string]interface{}{
"name": "someprefix-cm1-somehash", "configMap": map[string]interface{}{
}, "name": "someprefix-cm1-somehash",
"secret": map[string]interface{}{ },
"secretName": "someprefix-secret1-somehash", "secret": map[string]interface{}{
}, "secretName": "someprefix-secret1-somehash",
}, },
}, },
}, },

View File

@@ -22,54 +22,45 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
) )
func TestNamespaceRun(t *testing.T) { func TestNamespaceRun(t *testing.T) {
m := resmap.ResMap{ m := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm2",
"name": "cm2", "namespace": "foo",
"namespace": "foo",
},
}, },
}), }),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1", "namespace": "test",
"namespace": "test",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm2",
"name": "cm2", "namespace": "test",
"namespace": "test",
},
}, },
}), }),
} }

View File

@@ -23,42 +23,12 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
) )
func TestOverlayRun(t *testing.T) { func TestOverlayRun(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"labels": map[string]interface{}{
"old-label": "old-value",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx",
},
},
},
},
},
},
}),
}
overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
@@ -68,6 +38,67 @@ func TestOverlayRun(t *testing.T) {
"template": map[string]interface{}{ "template": map[string]interface{}{
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
"labels": map[string]interface{}{ "labels": map[string]interface{}{
"old-label": "old-value",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx",
},
},
},
},
},
}),
}
overlay := []*resource.Resource{
resource.NewResourceFromMap(map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"labels": map[string]interface{}{
"another-label": "foo",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
},
},
},
},
},
},
},
),
}
expected := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"labels": map[string]interface{}{
"old-label": "old-value",
"another-label": "foo", "another-label": "foo",
}, },
}, },
@@ -87,44 +118,6 @@ func TestOverlayRun(t *testing.T) {
}, },
}, },
}, },
},
},
),
}
expected := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource(
&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"metadata": map[string]interface{}{
"labels": map[string]interface{}{
"old-label": "old-value",
"another-label": "foo",
},
},
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
},
},
},
},
},
},
},
}), }),
} }
lt, err := NewOverlayTransformer(overlay) lt, err := NewOverlayTransformer(overlay)
@@ -143,22 +136,20 @@ func TestOverlayRun(t *testing.T) {
func TestMultiplePatches(t *testing.T) { func TestMultiplePatches(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "spec": map[string]interface{}{
"spec": map[string]interface{}{ "containers": []interface{}{
"containers": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "nginx",
"name": "nginx", "image": "nginx",
"image": "nginx",
},
}, },
}, },
}, },
@@ -167,8 +158,65 @@ func TestMultiplePatches(t *testing.T) {
}), }),
} }
overlay := []*resource.Resource{ overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
},
},
},
},
},
},
},
),
resource.NewResourceFromMap(map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"env": []interface{}{
map[string]interface{}{
"name": "ANOTHERENV",
"value": "HELLO",
},
},
},
map[string]interface{}{
"name": "busybox",
"image": "busybox",
},
},
},
},
},
},
),
}
expected := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
@@ -181,38 +229,15 @@ func TestMultiplePatches(t *testing.T) {
map[string]interface{}{ map[string]interface{}{
"name": "nginx", "name": "nginx",
"image": "nginx:latest", "image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
},
},
},
},
},
},
},
},
),
resource.NewBehaviorlessResource(&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"env": []interface{}{ "env": []interface{}{
map[string]interface{}{ map[string]interface{}{
"name": "ANOTHERENV", "name": "ANOTHERENV",
"value": "HELLO", "value": "HELLO",
}, },
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
}, },
}, },
map[string]interface{}{ map[string]interface{}{
@@ -223,46 +248,6 @@ func TestMultiplePatches(t *testing.T) {
}, },
}, },
}, },
},
},
),
}
expected := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource(
&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "ANOTHERENV",
"value": "HELLO",
},
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
},
},
},
map[string]interface{}{
"name": "busybox",
"image": "busybox",
},
},
},
},
},
},
}), }),
} }
lt, err := NewOverlayTransformer(overlay) lt, err := NewOverlayTransformer(overlay)
@@ -281,32 +266,8 @@ func TestMultiplePatches(t *testing.T) {
func TestMultiplePatchesWithConflict(t *testing.T) { func TestMultiplePatchesWithConflict(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(deploy, "deploy1"): resource.NewBehaviorlessResource( resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx",
},
},
},
},
},
},
}),
}
overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "apps/v1", "apiVersion": "apps/v1",
"kind": "Deployment", "kind": "Deployment",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
@@ -318,12 +279,32 @@ func TestMultiplePatchesWithConflict(t *testing.T) {
"containers": []interface{}{ "containers": []interface{}{
map[string]interface{}{ map[string]interface{}{
"name": "nginx", "name": "nginx",
"image": "nginx:latest", "image": "nginx",
"env": []interface{}{ },
map[string]interface{}{ },
"name": "SOMEENV", },
"value": "BAR", },
}, },
}),
}
overlay := []*resource.Resource{
resource.NewResourceFromMap(map[string]interface{}{
"apiVersion": "apps/v1",
"kind": "Deployment",
"metadata": map[string]interface{}{
"name": "deploy1",
},
"spec": map[string]interface{}{
"template": map[string]interface{}{
"spec": map[string]interface{}{
"containers": []interface{}{
map[string]interface{}{
"name": "nginx",
"image": "nginx:latest",
"env": []interface{}{
map[string]interface{}{
"name": "SOMEENV",
"value": "BAR",
}, },
}, },
}, },
@@ -333,21 +314,19 @@ func TestMultiplePatchesWithConflict(t *testing.T) {
}, },
}, },
), ),
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "apps/v1",
"apiVersion": "apps/v1", "kind": "Deployment",
"kind": "Deployment", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "deploy1",
"name": "deploy1", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "template": map[string]interface{}{
"template": map[string]interface{}{ "spec": map[string]interface{}{
"spec": map[string]interface{}{ "containers": []interface{}{
"containers": []interface{}{ map[string]interface{}{
map[string]interface{}{ "name": "nginx",
"name": "nginx", "image": "nginx:1.7.9",
"image": "nginx:1.7.9",
},
}, },
}, },
}, },
@@ -372,26 +351,8 @@ func TestMultiplePatchesWithConflict(t *testing.T) {
func TestNoSchemaOverlayRun(t *testing.T) { func TestNoSchemaOverlayRun(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(foo, "my-foo"): resource.NewBehaviorlessResource( resource.NewResId(foo, "my-foo"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{
"apiVersion": "example.com/v1",
"kind": "Foo",
"metadata": map[string]interface{}{
"name": "my-foo",
},
"spec": map[string]interface{}{
"bar": map[string]interface{}{
"A": "X",
"B": "Y",
},
},
},
}),
}
overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{
Object: map[string]interface{}{
"apiVersion": "example.com/v1", "apiVersion": "example.com/v1",
"kind": "Foo", "kind": "Foo",
"metadata": map[string]interface{}{ "metadata": map[string]interface{}{
@@ -399,28 +360,40 @@ func TestNoSchemaOverlayRun(t *testing.T) {
}, },
"spec": map[string]interface{}{ "spec": map[string]interface{}{
"bar": map[string]interface{}{ "bar": map[string]interface{}{
"B": nil, "A": "X",
"C": "Z", "B": "Y",
}, },
}, },
}),
}
overlay := []*resource.Resource{
resource.NewResourceFromMap(map[string]interface{}{
"apiVersion": "example.com/v1",
"kind": "Foo",
"metadata": map[string]interface{}{
"name": "my-foo",
},
"spec": map[string]interface{}{
"bar": map[string]interface{}{
"B": nil,
"C": "Z",
},
}, },
}, },
), ),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(foo, "my-foo"): resource.NewBehaviorlessResource( resource.NewResId(foo, "my-foo"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "A": "X",
"A": "X", "C": "Z",
"C": "Z",
},
}, },
}, },
}), }),
@@ -441,78 +414,70 @@ func TestNoSchemaOverlayRun(t *testing.T) {
func TestNoSchemaMultiplePatches(t *testing.T) { func TestNoSchemaMultiplePatches(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(foo, "my-foo"): resource.NewBehaviorlessResource( resource.NewResId(foo, "my-foo"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "A": "X",
"A": "X", "B": "Y",
"B": "Y",
},
}, },
}, },
}), }),
} }
overlay := []*resource.Resource{ overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "B": nil,
"B": nil, "C": "Z",
"C": "Z",
},
}, },
}, },
}, },
), ),
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
"spec": map[string]interface{}{
"bar": map[string]interface{}{
"C": "Z",
"D": "W",
}, },
"spec": map[string]interface{}{ "baz": map[string]interface{}{
"bar": map[string]interface{}{ "hello": "world",
"C": "Z",
"D": "W",
},
"baz": map[string]interface{}{
"hello": "world",
},
}, },
}, },
}, },
), ),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(foo, "my-foo"): resource.NewBehaviorlessResource( resource.NewResId(foo, "my-foo"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
"spec": map[string]interface{}{
"bar": map[string]interface{}{
"A": "X",
"C": "Z",
"D": "W",
}, },
"spec": map[string]interface{}{ "baz": map[string]interface{}{
"bar": map[string]interface{}{ "hello": "world",
"A": "X",
"C": "Z",
"D": "W",
},
"baz": map[string]interface{}{
"hello": "world",
},
}, },
}, },
}), }),
@@ -533,50 +498,44 @@ func TestNoSchemaMultiplePatches(t *testing.T) {
func TestNoSchemaMultiplePatchesWithConflict(t *testing.T) { func TestNoSchemaMultiplePatchesWithConflict(t *testing.T) {
base := resmap.ResMap{ base := resmap.ResMap{
resource.NewResId(foo, "my-foo"): resource.NewBehaviorlessResource( resource.NewResId(foo, "my-foo"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "A": "X",
"A": "X", "B": "Y",
"B": "Y",
},
}, },
}, },
}), }),
} }
overlay := []*resource.Resource{ overlay := []*resource.Resource{
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "B": nil,
"B": nil, "C": "Z",
"C": "Z",
},
}, },
}, },
}), }),
resource.NewBehaviorlessResource(&unstructured.Unstructured{ resource.NewResourceFromMap(map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "example.com/v1",
"apiVersion": "example.com/v1", "kind": "Foo",
"kind": "Foo", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "my-foo",
"name": "my-foo", },
}, "spec": map[string]interface{}{
"spec": map[string]interface{}{ "bar": map[string]interface{}{
"bar": map[string]interface{}{ "C": "NOT_Z",
"C": "NOT_Z",
},
}, },
}, },
}), }),

View File

@@ -22,51 +22,42 @@ import (
"github.com/kubernetes-sigs/kustomize/pkg/resmap" "github.com/kubernetes-sigs/kustomize/pkg/resmap"
"github.com/kubernetes-sigs/kustomize/pkg/resource" "github.com/kubernetes-sigs/kustomize/pkg/resource"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
) )
func TestPrefixNameRun(t *testing.T) { func TestPrefixNameRun(t *testing.T) {
m := resmap.ResMap{ m := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm1",
"name": "cm1",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "cm2",
"name": "cm2",
},
}, },
}), }),
} }
expected := resmap.ResMap{ expected := resmap.ResMap{
resource.NewResId(cmap, "cm1"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm1"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-cm1",
"name": "someprefix-cm1",
},
}, },
}), }),
resource.NewResId(cmap, "cm2"): resource.NewBehaviorlessResource( resource.NewResId(cmap, "cm2"): resource.NewResourceFromMap(
&unstructured.Unstructured{ map[string]interface{}{
Object: map[string]interface{}{ "apiVersion": "v1",
"apiVersion": "v1", "kind": "ConfigMap",
"kind": "ConfigMap", "metadata": map[string]interface{}{
"metadata": map[string]interface{}{ "name": "someprefix-cm2",
"name": "someprefix-cm2",
},
}, },
}), }),
} }