@@ -115,6 +115,7 @@ type TestScenarios struct {
115115 PodImage string
116116 Scenarios []PodScenario
117117 VnetSubnetCache map [string ]VnetSubnetInfo // Cache for vnet/subnet info
118+ NodeUsageTracker map [string ]map [string ]bool // Tracks which nodes are used per vnet/subnet: "vnet/subnet" -> map[nodeName]bool
118119}
119120
120121// VnetSubnetInfo holds network information for a vnet/subnet combination
@@ -336,16 +337,48 @@ func CreateScenarioResources(scenario PodScenario, testScenarios TestScenarios)
336337
337338 // Step 5: Select appropriate node based on scenario
338339 var targetNode string
340+ vnetSubnetKey := fmt .Sprintf ("%s/%s" , scenario .VnetName , scenario .SubnetName )
341+
342+ // Initialize node usage tracker for this vnet/subnet if not exists
343+ if testScenarios .NodeUsageTracker == nil {
344+ testScenarios .NodeUsageTracker = make (map [string ]map [string ]bool )
345+ }
346+ if testScenarios .NodeUsageTracker [vnetSubnetKey ] == nil {
347+ testScenarios .NodeUsageTracker [vnetSubnetKey ] = make (map [string ]bool )
348+ }
349+
339350 if scenario .NodeSelector == "low-nic" {
340351 if len (nodeInfo .LowNicNodes ) == 0 {
341352 return fmt .Errorf ("scenario %s: no low-NIC nodes available" , scenario .Name )
342353 }
343- targetNode = nodeInfo .LowNicNodes [0 ]
354+ // Find first unused node in the pool
355+ targetNode = ""
356+ for _ , node := range nodeInfo .LowNicNodes {
357+ if ! testScenarios.NodeUsageTracker [vnetSubnetKey ][node ] {
358+ targetNode = node
359+ testScenarios.NodeUsageTracker [vnetSubnetKey ][node ] = true
360+ break
361+ }
362+ }
363+ if targetNode == "" {
364+ return fmt .Errorf ("scenario %s: all low-NIC nodes already used for %s" , scenario .Name , vnetSubnetKey )
365+ }
344366 } else { // "high-nic"
345367 if len (nodeInfo .HighNicNodes ) == 0 {
346368 return fmt .Errorf ("scenario %s: no high-NIC nodes available" , scenario .Name )
347369 }
348- targetNode = nodeInfo .HighNicNodes [0 ]
370+ // Find first unused node in the pool
371+ targetNode = ""
372+ for _ , node := range nodeInfo .HighNicNodes {
373+ if ! testScenarios.NodeUsageTracker [vnetSubnetKey ][node ] {
374+ targetNode = node
375+ testScenarios.NodeUsageTracker [vnetSubnetKey ][node ] = true
376+ break
377+ }
378+ }
379+ if targetNode == "" {
380+ return fmt .Errorf ("scenario %s: all high-NIC nodes already used for %s" , scenario .Name , vnetSubnetKey )
381+ }
349382 }
350383
351384 // Step 6: Create pod
0 commit comments