@@ -71,7 +71,7 @@ var _ = Describe("Controllerutil", func() {
71
71
It ("should return an error if object is already owned by another controller" , func () {
72
72
t := true
73
73
rsOwners := []metav1.OwnerReference {
74
- metav1. OwnerReference {
74
+ {
75
75
Name : "bar" ,
76
76
Kind : "Deployment" ,
77
77
APIVersion : "extensions/v1beta1" ,
@@ -93,7 +93,7 @@ var _ = Describe("Controllerutil", func() {
93
93
f := false
94
94
t := true
95
95
rsOwners := []metav1.OwnerReference {
96
- metav1. OwnerReference {
96
+ {
97
97
Name : "foo" ,
98
98
Kind : "Deployment" ,
99
99
APIVersion : "extensions/v1beta1" ,
@@ -121,6 +121,7 @@ var _ = Describe("Controllerutil", func() {
121
121
var deploy * appsv1.Deployment
122
122
var deplSpec appsv1.DeploymentSpec
123
123
var deplKey types.NamespacedName
124
+ var specr controllerutil.MutateFn
124
125
125
126
BeforeEach (func () {
126
127
deploy = & appsv1.Deployment {
@@ -155,10 +156,12 @@ var _ = Describe("Controllerutil", func() {
155
156
Name : deploy .Name ,
156
157
Namespace : deploy .Namespace ,
157
158
}
159
+
160
+ specr = deploymentSpecr (deploy , deplSpec )
158
161
})
159
162
160
163
It ("creates a new object if one doesn't exists" , func () {
161
- op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentSpecr ( deplSpec ) )
164
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , specr )
162
165
163
166
By ("returning no error" )
164
167
Expect (err ).NotTo (HaveOccurred ())
@@ -170,19 +173,19 @@ var _ = Describe("Controllerutil", func() {
170
173
fetched := & appsv1.Deployment {}
171
174
Expect (c .Get (context .TODO (), deplKey , fetched )).To (Succeed ())
172
175
173
- By ("applying MutateFn" )
176
+ By ("being mutated by MutateFn" )
174
177
Expect (fetched .Spec .Template .Spec .Containers ).To (HaveLen (1 ))
175
178
Expect (fetched .Spec .Template .Spec .Containers [0 ].Name ).To (Equal (deplSpec .Template .Spec .Containers [0 ].Name ))
176
179
Expect (fetched .Spec .Template .Spec .Containers [0 ].Image ).To (Equal (deplSpec .Template .Spec .Containers [0 ].Image ))
177
180
})
178
181
179
182
It ("updates existing object" , func () {
180
183
var scale int32 = 2
181
- op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentSpecr ( deplSpec ) )
184
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , specr )
182
185
Expect (err ).NotTo (HaveOccurred ())
183
186
Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultCreated ))
184
187
185
- op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentScaler (scale ))
188
+ op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentScaler (deploy , scale ))
186
189
By ("returning no error" )
187
190
Expect (err ).NotTo (HaveOccurred ())
188
191
@@ -196,7 +199,7 @@ var _ = Describe("Controllerutil", func() {
196
199
})
197
200
198
201
It ("updates only changed objects" , func () {
199
- op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentSpecr ( deplSpec ) )
202
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , specr )
200
203
201
204
Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultCreated ))
202
205
Expect (err ).NotTo (HaveOccurred ())
@@ -209,13 +212,26 @@ var _ = Describe("Controllerutil", func() {
209
212
Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultNone ))
210
213
})
211
214
212
- It ("errors when reconcile renames an object" , func () {
213
- op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentSpecr (deplSpec ))
215
+ It ("errors when MutateFn changes objct name on creation" , func () {
216
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , func () error {
217
+ specr ()
218
+ return deploymentRenamer (deploy )()
219
+ })
220
+
221
+ By ("returning error" )
222
+ Expect (err ).To (HaveOccurred ())
223
+
224
+ By ("returning OperationResultNone" )
225
+ Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultNone ))
226
+ })
227
+
228
+ It ("errors when MutateFn renames an object" , func () {
229
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , specr )
214
230
215
231
Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultCreated ))
216
232
Expect (err ).NotTo (HaveOccurred ())
217
233
218
- op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentRenamer )
234
+ op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentRenamer ( deploy ) )
219
235
220
236
By ("returning error" )
221
237
Expect (err ).To (HaveOccurred ())
@@ -225,12 +241,12 @@ var _ = Describe("Controllerutil", func() {
225
241
})
226
242
227
243
It ("errors when object namespace changes" , func () {
228
- op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentSpecr ( deplSpec ) )
244
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), c , deploy , specr )
229
245
230
246
Expect (op ).To (BeEquivalentTo (controllerutil .OperationResultCreated ))
231
247
Expect (err ).NotTo (HaveOccurred ())
232
248
233
- op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentNamespaceChanger )
249
+ op , err = controllerutil .CreateOrUpdate (context .TODO (), c , deploy , deploymentNamespaceChanger ( deploy ) )
234
250
235
251
By ("returning error" )
236
252
Expect (err ).To (HaveOccurred ())
@@ -240,7 +256,7 @@ var _ = Describe("Controllerutil", func() {
240
256
})
241
257
242
258
It ("aborts immediately if there was an error initially retrieving the object" , func () {
243
- op , err := controllerutil .CreateOrUpdate (context .TODO (), errorReader {c }, deploy , func (_ runtime. Object ) error {
259
+ op , err := controllerutil .CreateOrUpdate (context .TODO (), errorReader {c }, deploy , func () error {
244
260
Fail ("Mutation method should not run" )
245
261
return nil
246
262
})
@@ -257,33 +273,34 @@ type errMetaObj struct {
257
273
metav1.ObjectMeta
258
274
}
259
275
260
- func deploymentSpecr (spec appsv1.DeploymentSpec ) controllerutil.MutateFn {
261
- return func (obj runtime.Object ) error {
262
- deploy := obj .(* appsv1.Deployment )
276
+ func deploymentSpecr (deploy * appsv1.Deployment , spec appsv1.DeploymentSpec ) controllerutil.MutateFn {
277
+ return func () error {
263
278
deploy .Spec = spec
264
279
return nil
265
280
}
266
281
}
267
282
268
- var deploymentIdentity controllerutil.MutateFn = func (obj runtime. Object ) error {
283
+ var deploymentIdentity controllerutil.MutateFn = func () error {
269
284
return nil
270
285
}
271
286
272
- var deploymentRenamer controllerutil.MutateFn = func (obj runtime.Object ) error {
273
- deploy := obj .(* appsv1.Deployment )
274
- deploy .Name = fmt .Sprintf ("%s-1" , deploy .Name )
275
- return nil
287
+ func deploymentRenamer (deploy * appsv1.Deployment ) controllerutil.MutateFn {
288
+ return func () error {
289
+ deploy .Name = fmt .Sprintf ("%s-1" , deploy .Name )
290
+ return nil
291
+ }
276
292
}
277
293
278
- var deploymentNamespaceChanger controllerutil.MutateFn = func (obj runtime.Object ) error {
279
- deploy := obj .(* appsv1.Deployment )
280
- deploy .Namespace = fmt .Sprintf ("%s-1" , deploy .Namespace )
281
- return nil
294
+ func deploymentNamespaceChanger (deploy * appsv1.Deployment ) controllerutil.MutateFn {
295
+ return func () error {
296
+ deploy .Namespace = fmt .Sprintf ("%s-1" , deploy .Namespace )
297
+ return nil
298
+
299
+ }
282
300
}
283
301
284
- func deploymentScaler (replicas int32 ) controllerutil.MutateFn {
285
- fn := func (obj runtime.Object ) error {
286
- deploy := obj .(* appsv1.Deployment )
302
+ func deploymentScaler (deploy * appsv1.Deployment , replicas int32 ) controllerutil.MutateFn {
303
+ fn := func () error {
287
304
deploy .Spec .Replicas = & replicas
288
305
return nil
289
306
}
0 commit comments