@@ -326,18 +326,21 @@ func (s *Scheduler) SelectVMID(ctx context.Context, config api.VirtualMachineCre
326
326
}
327
327
328
328
func (s * Scheduler ) SelectStorage (ctx context.Context , config api.VirtualMachineCreateOptions , nodeName string ) (string , error ) {
329
- s .logger .Info ("finding proxmox storage to be used for qemu" )
329
+ log := s .logger .WithValues ("qemu" , config .Name ).WithValues ("node" , nodeName )
330
+ log .Info ("finding proxmox storage to be used for qemu" )
330
331
if config .Storage != "" {
331
332
// to do: raise error if storage is not available on the node
332
333
return config .Storage , nil
333
334
}
334
335
335
336
node , err := s .client .Node (ctx , nodeName )
336
337
if err != nil {
338
+ log .Error (err , "failed to get node" )
337
339
return "" , err
338
340
}
339
341
storages , err := node .GetStorages (ctx )
340
342
if err != nil {
343
+ log .Error (err , "failed to get storages" )
341
344
return "" , err
342
345
}
343
346
@@ -375,44 +378,45 @@ func (s *Scheduler) RunFilterPlugins(ctx context.Context, state *framework.Cycle
375
378
return feasibleNodes , nil
376
379
}
377
380
378
- func (s * Scheduler ) RunScorePlugins (ctx context.Context , state * framework.CycleState , config api.VirtualMachineCreateOptions , nodes []* api.Node ) (framework.NodeScoreList , * framework.Status ) {
381
+ func (s * Scheduler ) RunScorePlugins (ctx context.Context , state * framework.CycleState , config api.VirtualMachineCreateOptions , nodes []* api.Node ) (map [ string ] framework.NodeScore , * framework.Status ) {
379
382
s .logger .Info ("scoring proxmox node" )
380
383
status := framework .NewStatus ()
381
- scoresMap := make (map [string ](map [int ]framework.NodeScore ))
384
+ scoresMap := make (map [string ](map [string ]framework.NodeScore ))
382
385
for _ , pl := range s .registry .ScorePlugins () {
383
- scoresMap [pl .Name ()] = make (map [int ]framework.NodeScore )
386
+ scoresMap [pl .Name ()] = make (map [string ]framework.NodeScore )
384
387
}
385
388
nodeInfos , err := framework .GetNodeInfoList (ctx , s .client )
386
389
if err != nil {
387
390
status .SetCode (1 )
388
391
s .logger .Error (err , "failed to get node info list" )
389
392
return nil , status
390
393
}
391
- for index , nodeInfo := range nodeInfos {
394
+ for _ , nodeInfo := range nodeInfos {
392
395
for _ , pl := range s .registry .ScorePlugins () {
393
396
score , status := pl .Score (ctx , state , config , nodeInfo )
394
397
if ! status .IsSuccess () {
395
398
status .SetCode (1 )
396
399
s .logger .Error (status .Error (), fmt .Sprintf ("failed to score node %s" , nodeInfo .Node ().Node ))
397
400
return nil , status
398
401
}
399
- scoresMap [pl .Name ()][index ] = framework.NodeScore {
402
+ scoresMap [pl .Name ()][nodeInfo . Node (). Node ] = framework.NodeScore {
400
403
Name : nodeInfo .Node ().Node ,
401
404
Score : score ,
402
405
}
403
406
}
404
407
}
405
- result := make (framework.NodeScoreList , 0 , len (nodes ))
406
- for i := range nodes {
407
- result = append (result , framework.NodeScore {Name : nodes [i ].Node , Score : 0 })
408
- for j := range scoresMap {
409
- result [i ].Score += scoresMap [j ][i ].Score
408
+ result := make (map [string ]framework.NodeScore )
409
+ for _ , node := range nodes {
410
+ result [node .Node ] = framework.NodeScore {Name : node .Node , Score : 0 }
411
+ for plugin := range scoresMap {
412
+ r := result [node .Node ]
413
+ r .Score += scoresMap [plugin ][node.Node ].Score
410
414
}
411
415
}
412
416
return result , status
413
417
}
414
418
415
- func selectHighestScoreNode (scoreList framework.NodeScoreList ) (string , error ) {
419
+ func selectHighestScoreNode (scoreList map [ string ] framework.NodeScore ) (string , error ) {
416
420
if len (scoreList ) == 0 {
417
421
return "" , fmt .Errorf ("empty node score list" )
418
422
}
0 commit comments