@@ -17,6 +17,7 @@ limitations under the License.
17
17
package builder
18
18
19
19
import (
20
+ "errors"
20
21
"fmt"
21
22
"strings"
22
23
@@ -182,10 +183,6 @@ func (blder *Builder) Build(r reconcile.Reconciler) (controller.Controller, erro
182
183
if blder .forInput .err != nil {
183
184
return nil , blder .forInput .err
184
185
}
185
- // Checking the reconcile type exist or not
186
- if blder .forInput .object == nil {
187
- return nil , fmt .Errorf ("must provide an object for reconciliation" )
188
- }
189
186
190
187
// Set the ControllerManagedBy
191
188
if err := blder .doController (r ); err != nil {
@@ -231,6 +228,9 @@ func (blder *Builder) doWatch() error {
231
228
}
232
229
233
230
// Watches the managed types
231
+ if len (blder .ownsInput ) > 0 && blder .forInput .object == nil {
232
+ return errors .New ("Owns() can only be used together with For()" )
233
+ }
234
234
for _ , own := range blder .ownsInput {
235
235
typeForSrc , err := blder .project (own .object , own .objectProjection )
236
236
if err != nil {
@@ -269,11 +269,14 @@ func (blder *Builder) doWatch() error {
269
269
return nil
270
270
}
271
271
272
- func (blder * Builder ) getControllerName (gvk schema.GroupVersionKind ) string {
272
+ func (blder * Builder ) getControllerName (gvk schema.GroupVersionKind , hasGVK bool ) ( string , error ) {
273
273
if blder .name != "" {
274
- return blder .name
274
+ return blder .name , nil
275
+ }
276
+ if ! hasGVK {
277
+ return "" , errors .New ("one of For() or Named() must be called" )
275
278
}
276
- return strings .ToLower (gvk .Kind )
279
+ return strings .ToLower (gvk .Kind ), nil
277
280
}
278
281
279
282
func (blder * Builder ) doController (r reconcile.Reconciler ) error {
@@ -286,13 +289,18 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
286
289
287
290
// Retrieve the GVK from the object we're reconciling
288
291
// to prepopulate logger information, and to optionally generate a default name.
289
- gvk , err := getGvk (blder .forInput .object , blder .mgr .GetScheme ())
290
- if err != nil {
291
- return err
292
+ var gvk schema.GroupVersionKind
293
+ hasGVK := blder .forInput .object != nil
294
+ if hasGVK {
295
+ var err error
296
+ gvk , err = getGvk (blder .forInput .object , blder .mgr .GetScheme ())
297
+ if err != nil {
298
+ return err
299
+ }
292
300
}
293
301
294
302
// Setup concurrency.
295
- if ctrlOptions .MaxConcurrentReconciles == 0 {
303
+ if ctrlOptions .MaxConcurrentReconciles == 0 && hasGVK {
296
304
groupKind := gvk .GroupKind ().String ()
297
305
298
306
if concurrency , ok := globalOpts .GroupKindConcurrency [groupKind ]; ok && concurrency > 0 {
@@ -305,21 +313,30 @@ func (blder *Builder) doController(r reconcile.Reconciler) error {
305
313
ctrlOptions .CacheSyncTimeout = * globalOpts .CacheSyncTimeout
306
314
}
307
315
308
- controllerName := blder .getControllerName (gvk )
316
+ controllerName , err := blder .getControllerName (gvk , hasGVK )
317
+ if err != nil {
318
+ return err
319
+ }
309
320
310
321
// Setup the logger.
311
322
if ctrlOptions .LogConstructor == nil {
312
323
log := blder .mgr .GetLogger ().WithValues (
313
324
"controller" , controllerName ,
314
- "controllerGroup" , gvk .Group ,
315
- "controllerKind" , gvk .Kind ,
316
325
)
326
+ if hasGVK {
327
+ log = log .WithValues (
328
+ "controllerGroup" , gvk .Group ,
329
+ "controllerKind" , gvk .Kind ,
330
+ )
331
+ }
317
332
318
333
ctrlOptions .LogConstructor = func (req * reconcile.Request ) logr.Logger {
319
334
log := log
320
335
if req != nil {
336
+ if hasGVK {
337
+ log = log .WithValues (gvk .Kind , klog .KRef (req .Namespace , req .Name ))
338
+ }
321
339
log = log .WithValues (
322
- gvk .Kind , klog .KRef (req .Namespace , req .Name ),
323
340
"namespace" , req .Namespace , "name" , req .Name ,
324
341
)
325
342
}
0 commit comments