Browse code

fix project request with quota

deads2k authored on 2015/10/27 23:57:59
Showing 8 changed files
... ...
@@ -97,14 +97,16 @@ func TestExampleObjectSchemas(t *testing.T) {
97 97
 			"ldapserver-service":             &kapi.Service{},
98 98
 		},
99 99
 		"../test/integration/fixtures": {
100
-			"test-deployment-config":    &deployapi.DeploymentConfig{},
101
-			"test-image":                &imageapi.Image{},
102
-			"test-image-stream":         &imageapi.ImageStream{},
103
-			"test-image-stream-mapping": nil, // skip &imageapi.ImageStreamMapping{},
104
-			"test-route":                &routeapi.Route{},
105
-			"test-service":              &kapi.Service{},
106
-			"test-buildcli":             &kapi.List{},
107
-			"test-buildcli-beta2":       &kapi.List{},
100
+			// TODO fix this test to  handle json and yaml
101
+			"project-request-template-with-quota": nil, // skip a yaml file
102
+			"test-deployment-config":              &deployapi.DeploymentConfig{},
103
+			"test-image":                          &imageapi.Image{},
104
+			"test-image-stream":                   &imageapi.ImageStream{},
105
+			"test-image-stream-mapping":           nil, // skip &imageapi.ImageStreamMapping{},
106
+			"test-route":                          &routeapi.Route{},
107
+			"test-service":                        &kapi.Service{},
108
+			"test-buildcli":                       &kapi.List{},
109
+			"test-buildcli-beta2":                 &kapi.List{},
108 110
 		},
109 111
 		"../test/templates/fixtures": {
110 112
 			"crunchydata-pod": nil, // Explicitly fails validation, but should pass transformation
... ...
@@ -252,11 +252,7 @@ func (o *EditOptions) RunEdit() error {
252 252
 			if err != nil {
253 253
 				return err
254 254
 			}
255
-			data, err := info.Mapping.Codec.Encode(info.Object)
256
-			if err != nil {
257
-				return err
258
-			}
259
-			updated, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, false, data)
255
+			updated, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, false, info.Object)
260 256
 			if err != nil {
261 257
 				fmt.Fprintln(o.out, results.AddError(err, info))
262 258
 				return nil
... ...
@@ -415,7 +411,11 @@ func applyPatch(delta *jsonmerge.Delta, info *resource.Info, version string) err
415 415
 	if err != nil {
416 416
 		return patchError{err}
417 417
 	}
418
-	updated, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, false, merged)
418
+	mergedObj, err := info.Mapping.Codec.Decode(merged)
419
+	if err != nil {
420
+		return patchError{err}
421
+	}
422
+	updated, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, false, mergedObj)
419 423
 	if err != nil {
420 424
 		return err
421 425
 	}
... ...
@@ -290,13 +290,7 @@ func RunEnv(f *clientcmd.Factory, in io.Reader, out io.Writer, cmd *cobra.Comman
290 290
 
291 291
 	failed := false
292 292
 	for _, info := range infos {
293
-		data, err := info.Mapping.Codec.Encode(info.Object)
294
-		if err != nil {
295
-			fmt.Fprintf(cmd.Out(), "Error: %v\n", err)
296
-			failed = true
297
-			continue
298
-		}
299
-		obj, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, data)
293
+		obj, err := resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, info.Object)
300 294
 		if err != nil {
301 295
 			handlePodUpdateError(cmd.Out(), err, "environment variables")
302 296
 			failed = true
... ...
@@ -439,17 +439,11 @@ func (v *VolumeOptions) RunVolume(args []string) error {
439 439
 
440 440
 	failed := false
441 441
 	for _, info := range updateInfos {
442
-		data, err := info.Mapping.Codec.Encode(info.Object)
443
-		if err != nil {
444
-			fmt.Fprintf(v.Err, "error: %v\n", err)
445
-			failed = true
446
-			continue
447
-		}
448 442
 		var obj runtime.Object
449 443
 		if len(info.ResourceVersion) == 0 {
450
-			obj, err = resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, false, data)
444
+			obj, err = resource.NewHelper(info.Client, info.Mapping).Create(info.Namespace, false, info.Object)
451 445
 		} else {
452
-			obj, err = resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, data)
446
+			obj, err = resource.NewHelper(info.Client, info.Mapping).Replace(info.Namespace, info.Name, true, info.Object)
453 447
 		}
454 448
 		if err != nil {
455 449
 			handlePodUpdateError(v.Err, err, "volume")
... ...
@@ -31,11 +31,7 @@ func NewPrintNameOrErrorAfter(mapper meta.RESTMapper, short bool, operation stri
31 31
 }
32 32
 
33 33
 func encodeAndCreate(info *resource.Info, namespace string, obj runtime.Object) (runtime.Object, error) {
34
-	data, err := info.Mapping.Codec.Encode(obj)
35
-	if err != nil {
36
-		return nil, err
37
-	}
38
-	return resource.NewHelper(info.Client, info.Mapping).Create(namespace, false, data)
34
+	return resource.NewHelper(info.Client, info.Mapping).Create(namespace, false, obj)
39 35
 }
40 36
 
41 37
 // Create attempts to create each item generically, gathering all errors in the
42 38
new file mode 100644
... ...
@@ -0,0 +1,115 @@
0
+apiVersion: v1
1
+kind: Template
2
+metadata:
3
+  creationTimestamp: 2015-10-24T18:25:22Z
4
+  name: default-project-request
5
+  namespace: default
6
+objects:
7
+- apiVersion: v1
8
+  kind: Project
9
+  metadata:
10
+    annotations:
11
+      openshift.io/description: ${PROJECT_DESCRIPTION}
12
+      openshift.io/display-name: ${PROJECT_DISPLAYNAME}
13
+      extra: here
14
+    creationTimestamp: null
15
+    name: ${PROJECT_NAME}
16
+  spec: {}
17
+  status: {}
18
+- apiVersion: v1
19
+  kind: ResourceQuota
20
+  metadata:
21
+    name: ${PROJECT_NAME}-quota
22
+  spec:
23
+    hard:
24
+      cpu: 200m
25
+      memory: 512Mi
26
+      pods: 3
27
+      replicationcontrollers: 3
28
+      resourcequotas: 1
29
+      services: 3
30
+- apiVersion: v1
31
+  kind: LimitRange
32
+  metadata:
33
+    creationTimestamp: null
34
+    name: ${PROJECT_NAME}-limits
35
+  spec:
36
+    limits:
37
+    - max:
38
+        cpu: 500m
39
+        memory: 750Mi
40
+      min:
41
+        cpu: 10m
42
+        memory: 5Mi
43
+      type: Pod
44
+    - default:
45
+        cpu: 100m
46
+        memory: 100Mi
47
+      max:
48
+        cpu: 500m
49
+        memory: 750Mi
50
+      min:
51
+        cpu: 10m
52
+        memory: 5Mi
53
+      type: Container
54
+- apiVersion: v1
55
+  groupNames: []
56
+  kind: RoleBinding
57
+  metadata:
58
+    creationTimestamp: null
59
+    name: admins
60
+    namespace: ${PROJECT_NAME}
61
+  roleRef:
62
+    name: admin
63
+  subjects:
64
+  - kind: User
65
+    name: ${PROJECT_ADMIN_USER}
66
+  userNames:
67
+  - ${PROJECT_ADMIN_USER}
68
+- apiVersion: v1
69
+  groupNames:
70
+  - system:serviceaccounts:${PROJECT_NAME}
71
+  kind: RoleBinding
72
+  metadata:
73
+    creationTimestamp: null
74
+    name: system:image-pullers
75
+    namespace: ${PROJECT_NAME}
76
+  roleRef:
77
+    name: system:image-puller
78
+  subjects:
79
+  - kind: SystemGroup
80
+    name: system:serviceaccounts:${PROJECT_NAME}
81
+  userNames: []
82
+- apiVersion: v1
83
+  groupNames: []
84
+  kind: RoleBinding
85
+  metadata:
86
+    creationTimestamp: null
87
+    name: system:image-builders
88
+    namespace: ${PROJECT_NAME}
89
+  roleRef:
90
+    name: system:image-builder
91
+  subjects:
92
+  - kind: ServiceAccount
93
+    name: builder
94
+  userNames:
95
+  - system:serviceaccount:${PROJECT_NAME}:builder
96
+- apiVersion: v1
97
+  groupNames: []
98
+  kind: RoleBinding
99
+  metadata:
100
+    creationTimestamp: null
101
+    name: system:deployers
102
+    namespace: ${PROJECT_NAME}
103
+  roleRef:
104
+    name: system:deployer
105
+  subjects:
106
+  - kind: ServiceAccount
107
+    name: deployer
108
+  userNames:
109
+  - system:serviceaccount:${PROJECT_NAME}:deployer
110
+parameters:
111
+- name: PROJECT_NAME
112
+- name: PROJECT_DISPLAYNAME
113
+- name: PROJECT_DESCRIPTION
114
+- name: PROJECT_ADMIN_USER
0 115
\ No newline at end of file
... ...
@@ -19,7 +19,6 @@ import (
19 19
 	"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
20 20
 	"github.com/openshift/origin/pkg/cmd/util/tokencmd"
21 21
 	projectapi "github.com/openshift/origin/pkg/project/api"
22
-	projectrequeststorage "github.com/openshift/origin/pkg/project/registry/projectrequest/delegated"
23 22
 	testutil "github.com/openshift/origin/test/util"
24 23
 	testserver "github.com/openshift/origin/test/util/server"
25 24
 )
... ...
@@ -132,11 +131,13 @@ func TestUnprivilegedNewProjectFromTemplate(t *testing.T) {
132 132
 		t.Fatalf("unexpected error: %v", err)
133 133
 	}
134 134
 
135
-	template := projectrequeststorage.DefaultTemplate()
135
+	template, err := testutil.GetTemplateFixture("fixtures/project-request-template-with-quota.yaml")
136
+	if err != nil {
137
+		t.Fatalf("unexpected error: %v", err)
138
+	}
136 139
 	template.Name = templateName
137 140
 	template.Namespace = namespace
138 141
 
139
-	template.Objects[0].(*projectapi.Project).Annotations["extra"] = "here"
140 142
 	_, err = clusterAdminClient.Templates(namespace).Create(template)
141 143
 	if err != nil {
142 144
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -4,10 +4,13 @@ import (
4 4
 	"fmt"
5 5
 	"io/ioutil"
6 6
 
7
-	buildapi "github.com/openshift/origin/pkg/build/api"
8
-	imageapi "github.com/openshift/origin/pkg/image/api"
9 7
 	kapi "k8s.io/kubernetes/pkg/api"
10 8
 	"k8s.io/kubernetes/pkg/api/latest"
9
+	kyaml "k8s.io/kubernetes/pkg/util/yaml"
10
+
11
+	buildapi "github.com/openshift/origin/pkg/build/api"
12
+	imageapi "github.com/openshift/origin/pkg/image/api"
13
+	templateapi "github.com/openshift/origin/pkg/template/api"
11 14
 )
12 15
 
13 16
 // CreateSampleImageStream creates an ImageStream in given namespace
... ...
@@ -58,3 +61,19 @@ func GetSecretFixture(filename string) *kapi.Secret {
58 58
 	latest.CodecForLegacyGroup().DecodeInto(jsonData, &secret)
59 59
 	return &secret
60 60
 }
61
+
62
+func GetTemplateFixture(filename string) (*templateapi.Template, error) {
63
+	data, err := ioutil.ReadFile(filename)
64
+	if err != nil {
65
+		return nil, err
66
+	}
67
+	jsonData, err := kyaml.ToJSON(data)
68
+	if err != nil {
69
+		return nil, err
70
+	}
71
+	obj, err := latest.CodecForLegacyGroup().Decode(jsonData)
72
+	if err != nil {
73
+		return nil, err
74
+	}
75
+	return obj.(*templateapi.Template), nil
76
+}