From 4348646128317cb649f4385200335ee5115cfd1d Mon Sep 17 00:00:00 2001
From: Vacant2333 <vacant2333@gmail.com>
Date: Fri, 1 Nov 2024 16:59:33 +0800
Subject: [PATCH] fix: avoid selecting subnets with insufficient available IP
 addresses

Signed-off-by: Vacant2333 <vacant2333@gmail.com>
---
 pkg/providers/subnet/subnet.go | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/pkg/providers/subnet/subnet.go b/pkg/providers/subnet/subnet.go
index 58fc1776804c..7cef3de4c8a1 100644
--- a/pkg/providers/subnet/subnet.go
+++ b/pkg/providers/subnet/subnet.go
@@ -166,6 +166,13 @@ func (p *DefaultProvider) ZonalSubnetsForLaunch(ctx context.Context, nodeClass *
 		if trackedIPs, ok := p.inflightIPs[subnet.ID]; ok {
 			prevIPs = trackedIPs
 		}
+
+		// Check if the remaining IP count is insufficient to meet the predicted IP usage;
+		// if so, remove this subnet zone record from inflightIPs and continue to the next item in the loop。
+		if prevIPs-predictedIPsUsed < 0 {
+			delete(zonalSubnets, subnet.Zone)
+			continue
+		}
 		p.inflightIPs[subnet.ID] = prevIPs - predictedIPsUsed
 	}
 	return zonalSubnets, nil