@@ -6,12 +6,11 @@ import (
6
6
"time"
7
7
8
8
"github.com/golang/glog"
9
- clientSrIov "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/client/clientset/versioned"
10
9
"github.com/openshift-kni/eco-goinfra/pkg/msg"
11
-
12
10
k8serrors "k8s.io/apimachinery/pkg/api/errors"
13
11
"k8s.io/apimachinery/pkg/runtime/schema"
14
12
"k8s.io/apimachinery/pkg/util/wait"
13
+ runtimeClient "sigs.k8s.io/controller-runtime/pkg/client"
15
14
16
15
srIovV1 "github.com/k8snetworkplumbingwg/sriov-network-operator/api/v1"
17
16
"github.com/openshift-kni/eco-goinfra/pkg/clients"
@@ -31,7 +30,7 @@ type NetworkBuilder struct {
31
30
// object is created.
32
31
errorMsg string
33
32
// apiClient opens api connection to the cluster.
34
- apiClient clientSrIov. Interface
33
+ apiClient runtimeClient. Client
35
34
}
36
35
37
36
// NetworkAdditionalOptions additional options for SriovNetwork object.
@@ -40,8 +39,21 @@ type NetworkAdditionalOptions func(builder *NetworkBuilder) (*NetworkBuilder, er
40
39
// NewNetworkBuilder creates new instance of Builder.
41
40
func NewNetworkBuilder (
42
41
apiClient * clients.Settings , name , nsname , targetNsname , resName string ) * NetworkBuilder {
42
+ if apiClient == nil {
43
+ glog .V (100 ).Infof ("The apiClient cannot be nil" )
44
+
45
+ return nil
46
+ }
47
+
48
+ err := apiClient .AttachScheme (srIovV1 .AddToScheme )
49
+ if err != nil {
50
+ glog .V (100 ).Infof ("Failed to add sriovv1 scheme to client schemes" )
51
+
52
+ return nil
53
+ }
54
+
43
55
builder := NetworkBuilder {
44
- apiClient : apiClient .ClientSrIov ,
56
+ apiClient : apiClient .Client ,
45
57
Definition : & srIovV1.SriovNetwork {
46
58
ObjectMeta : metav1.ObjectMeta {
47
59
Name : name ,
@@ -292,8 +304,15 @@ func PullNetwork(apiClient *clients.Settings, name, nsname string) (*NetworkBuil
292
304
return nil , fmt .Errorf ("sriovnetwork 'apiClient' cannot be empty" )
293
305
}
294
306
307
+ err := apiClient .AttachScheme (srIovV1 .AddToScheme )
308
+ if err != nil {
309
+ glog .V (100 ).Infof ("Failed to add sriovv1 scheme to client schemes" )
310
+
311
+ return nil , err
312
+ }
313
+
295
314
builder := NetworkBuilder {
296
- apiClient : apiClient .ClientSrIov ,
315
+ apiClient : apiClient .Client ,
297
316
Definition : & srIovV1.SriovNetwork {
298
317
ObjectMeta : metav1.ObjectMeta {
299
318
Name : name ,
@@ -323,23 +342,50 @@ func PullNetwork(apiClient *clients.Settings, name, nsname string) (*NetworkBuil
323
342
return & builder , nil
324
343
}
325
344
345
+ // Get returns CatalogSource object if found.
346
+ func (builder * NetworkBuilder ) Get () (* srIovV1.SriovNetwork , error ) {
347
+ if valid , err := builder .validate (); ! valid {
348
+ return nil , err
349
+ }
350
+
351
+ glog .V (100 ).Infof (
352
+ "Collecting SriovNetwork object %s in namespace %s" ,
353
+ builder .Definition .Name , builder .Definition .Namespace )
354
+
355
+ network := & srIovV1.SriovNetwork {}
356
+ err := builder .apiClient .Get (context .TODO (),
357
+ runtimeClient.ObjectKey {Name : builder .Definition .Name , Namespace : builder .Definition .Namespace },
358
+ network )
359
+
360
+ if err != nil {
361
+ glog .V (100 ).Infof (
362
+ "SriovNetwork object %s does not exist in namespace %s" ,
363
+ builder .Definition .Name , builder .Definition .Namespace )
364
+
365
+ return nil , err
366
+ }
367
+
368
+ return network , nil
369
+ }
370
+
326
371
// Create generates SrIovNetwork in a cluster and stores the created object in struct.
327
372
func (builder * NetworkBuilder ) Create () (* NetworkBuilder , error ) {
328
373
if valid , err := builder .validate (); ! valid {
329
374
return builder , err
330
375
}
331
376
332
377
if ! builder .Exists () {
333
- var err error
334
- builder .Object , err = builder .apiClient .SriovnetworkV1 ().SriovNetworks (builder .Definition .Namespace ).Create (
335
- context .TODO (), builder .Definition , metav1.CreateOptions {},
336
- )
378
+ err := builder .apiClient .Create (context .TODO (), builder .Definition )
337
379
338
380
if err != nil {
381
+ glog .V (100 ).Infof ("Failed to create SriovNetwork" )
382
+
339
383
return nil , err
340
384
}
341
385
}
342
386
387
+ builder .Object = builder .Definition
388
+
343
389
return builder , nil
344
390
}
345
391
@@ -350,11 +396,12 @@ func (builder *NetworkBuilder) Delete() error {
350
396
}
351
397
352
398
if ! builder .Exists () {
399
+ glog .V (100 ).Infof ("SriovNetwork cannot be deleted because it does not exist" )
400
+
353
401
return nil
354
402
}
355
403
356
- err := builder .apiClient .SriovnetworkV1 ().SriovNetworks (builder .Definition .Namespace ).Delete (
357
- context .TODO (), builder .Object .Name , metav1.DeleteOptions {})
404
+ err := builder .apiClient .Delete (context .TODO (), builder .Definition )
358
405
359
406
if err != nil {
360
407
return err
@@ -394,8 +441,8 @@ func (builder *NetworkBuilder) WaitUntilDeleted(timeout time.Duration) error {
394
441
395
442
return wait .PollUntilContextTimeout (
396
443
context .TODO (), time .Second , timeout , true , func (ctx context.Context ) (bool , error ) {
397
- _ , err := builder .apiClient . SriovnetworkV1 (). SriovNetworks ( builder . Definition . Namespace ).
398
- Get ( context . TODO (), builder . Definition . Name , metav1. GetOptions {})
444
+ _ , err := builder .Get ()
445
+
399
446
if err == nil {
400
447
glog .V (100 ).Infof ("SrIovNetwork %s/%s still present" , builder .Definition .Name , builder .Definition .Namespace )
401
448
@@ -420,9 +467,12 @@ func (builder *NetworkBuilder) Exists() bool {
420
467
return false
421
468
}
422
469
470
+ glog .V (100 ).Infof (
471
+ "Checking if SriovNetwork %s exists" ,
472
+ builder .Definition .Name )
473
+
423
474
var err error
424
- builder .Object , err = builder .apiClient .SriovnetworkV1 ().SriovNetworks (builder .Definition .Namespace ).Get (
425
- context .TODO (), builder .Definition .Name , metav1.GetOptions {})
475
+ builder .Object , err = builder .Get ()
426
476
427
477
return err == nil || ! k8serrors .IsNotFound (err )
428
478
}
@@ -437,26 +487,28 @@ func (builder *NetworkBuilder) Update(force bool) (*NetworkBuilder, error) {
437
487
builder .Definition .Name , builder .Definition .Namespace ,
438
488
)
439
489
440
- var err error
441
- builder . Object , err = builder . apiClient . SriovnetworkV1 (). SriovNetworks ( builder . Definition . Namespace ).
442
- Update ( context . TODO (), builder . Definition , metav1. UpdateOptions {})
490
+ if ! builder . Exists () {
491
+ return nil , fmt . Errorf ( "failed to update SriovNetwork, object does not exist on cluster" )
492
+ }
443
493
444
- if err != nil {
445
- if force {
446
- glog .V (100 ).Infof (
447
- msg .FailToUpdateNotification ("SrIovNetwork" , builder .Definition .Name , builder .Definition .Namespace ))
494
+ err := builder .apiClient .Update (context .TODO (), builder .Definition )
448
495
449
- err = builder .Delete ()
496
+ if err == nil {
497
+ builder .Object = builder .Definition
498
+ } else if force {
499
+ glog .V (100 ).Infof (
500
+ msg .FailToUpdateNotification ("SrIovNetwork" , builder .Definition .Name , builder .Definition .Namespace ))
450
501
451
- if err != nil {
452
- glog .V (100 ).Infof (
453
- msg .FailToUpdateError ("SrIovNetwork" , builder .Definition .Name , builder .Definition .Namespace ))
502
+ err = builder .Delete ()
454
503
455
- return nil , err
456
- }
504
+ if err != nil {
505
+ glog .V (100 ).Infof (
506
+ msg .FailToUpdateError ("SrIovNetwork" , builder .Definition .Name , builder .Definition .Namespace ))
457
507
458
- return builder . Create ()
508
+ return nil , err
459
509
}
510
+
511
+ return builder .Create ()
460
512
}
461
513
462
514
return builder , err
0 commit comments