@@ -24,11 +24,8 @@ import (
2424
2525 corev1 "k8s.io/api/core/v1"
2626 "k8s.io/apimachinery/pkg/api/errors"
27- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
28- "k8s.io/apimachinery/pkg/labels"
2927 "k8s.io/apimachinery/pkg/runtime"
3028 "k8s.io/apimachinery/pkg/types"
31- "k8s.io/apimachinery/pkg/util/intstr"
3229 "k8s.io/client-go/tools/record"
3330 "k8s.io/client-go/util/workqueue"
3431 ctrl "sigs.k8s.io/controller-runtime"
@@ -48,13 +45,6 @@ import (
4845 "github.com/k8snetworkplumbingwg/sriov-network-operator/pkg/vars"
4946)
5047
51- var (
52- oneNode = intstr .FromInt32 (1 )
53- defaultNpcl = & sriovnetworkv1.SriovNetworkPoolConfig {Spec : sriovnetworkv1.SriovNetworkPoolConfigSpec {
54- MaxUnavailable : & oneNode ,
55- NodeSelector : & metav1.LabelSelector {}}}
56- )
57-
5848type DrainReconcile struct {
5949 client.Client
6050 Scheme * runtime.Scheme
@@ -345,94 +335,7 @@ func (dr *DrainReconcile) tryDrainNode(ctx context.Context, node *corev1.Node) (
345335}
346336
347337func (dr * DrainReconcile ) findNodePoolConfig (ctx context.Context , node * corev1.Node ) (* sriovnetworkv1.SriovNetworkPoolConfig , []corev1.Node , error ) {
348- logger := log .FromContext (ctx )
349- logger .Info ("findNodePoolConfig():" )
350- // get all the sriov network pool configs
351- npcl := & sriovnetworkv1.SriovNetworkPoolConfigList {}
352- err := dr .List (ctx , npcl )
353- if err != nil {
354- logger .Error (err , "failed to list sriovNetworkPoolConfig" )
355- return nil , nil , err
356- }
357-
358- selectedNpcl := []* sriovnetworkv1.SriovNetworkPoolConfig {}
359- nodesInPools := map [string ]interface {}{}
360-
361- for _ , npc := range npcl .Items {
362- // we skip hw offload objects
363- if npc .Spec .OvsHardwareOffloadConfig .Name != "" {
364- continue
365- }
366-
367- if npc .Spec .NodeSelector == nil {
368- npc .Spec .NodeSelector = & metav1.LabelSelector {}
369- }
370-
371- selector , err := metav1 .LabelSelectorAsSelector (npc .Spec .NodeSelector )
372- if err != nil {
373- logger .Error (err , "failed to create label selector from nodeSelector" , "nodeSelector" , npc .Spec .NodeSelector )
374- return nil , nil , err
375- }
376-
377- if selector .Matches (labels .Set (node .Labels )) {
378- selectedNpcl = append (selectedNpcl , npc .DeepCopy ())
379- }
380-
381- nodeList := & corev1.NodeList {}
382- err = dr .List (ctx , nodeList , & client.ListOptions {LabelSelector : selector })
383- if err != nil {
384- logger .Error (err , "failed to list all the nodes matching the pool with label selector from nodeSelector" ,
385- "machineConfigPoolName" , npc ,
386- "nodeSelector" , npc .Spec .NodeSelector )
387- return nil , nil , err
388- }
389-
390- for _ , nodeName := range nodeList .Items {
391- nodesInPools [nodeName .Name ] = nil
392- }
393- }
394-
395- if len (selectedNpcl ) > 1 {
396- // don't allow the node to be part of multiple pools
397- err = fmt .Errorf ("node is part of more then one pool" )
398- logger .Error (err , "multiple pools founded for a specific node" , "numberOfPools" , len (selectedNpcl ), "pools" , selectedNpcl )
399- return nil , nil , err
400- } else if len (selectedNpcl ) == 1 {
401- // found one pool for our node
402- logger .V (2 ).Info ("found sriovNetworkPool" , "pool" , * selectedNpcl [0 ])
403- selector , err := metav1 .LabelSelectorAsSelector (selectedNpcl [0 ].Spec .NodeSelector )
404- if err != nil {
405- logger .Error (err , "failed to create label selector from nodeSelector" , "nodeSelector" , selectedNpcl [0 ].Spec .NodeSelector )
406- return nil , nil , err
407- }
408-
409- // list all the nodes that are also part of this pool and return them
410- nodeList := & corev1.NodeList {}
411- err = dr .List (ctx , nodeList , & client.ListOptions {LabelSelector : selector })
412- if err != nil {
413- logger .Error (err , "failed to list nodes using with label selector" , "labelSelector" , selector )
414- return nil , nil , err
415- }
416-
417- return selectedNpcl [0 ], nodeList .Items , nil
418- } else {
419- // in this case we get all the nodes and remove the ones that already part of any pool
420- logger .V (1 ).Info ("node doesn't belong to any pool, using default drain configuration with MaxUnavailable of one" , "pool" , * defaultNpcl )
421- nodeList := & corev1.NodeList {}
422- err = dr .List (ctx , nodeList )
423- if err != nil {
424- logger .Error (err , "failed to list all the nodes" )
425- return nil , nil , err
426- }
427-
428- defaultNodeLists := []corev1.Node {}
429- for _ , nodeObj := range nodeList .Items {
430- if _ , exist := nodesInPools [nodeObj .Name ]; ! exist {
431- defaultNodeLists = append (defaultNodeLists , nodeObj )
432- }
433- }
434- return defaultNpcl , defaultNodeLists , nil
435- }
338+ return utils .FindNodePoolConfig (ctx , node , dr .Client )
436339}
437340
438341// SetupWithManager sets up the controller with the Manager.
0 commit comments