@@ -1335,37 +1335,33 @@ func (c *NebiusClient) getWorkingPublicImageID(ctx context.Context, requestedIma
13351335 v1 .LogField ("requestedImage" , requestedImage ),
13361336 v1 .LogField ("publicImagesParent" , publicImagesParent ))
13371337
1338- imagesResp , err := c .sdk .Services ().Compute ().V1 ().Image ().List (ctx , & compute.ListImagesRequest {
1339- ParentId : publicImagesParent ,
1340- })
1341- if err != nil {
1342- c .logger .Error (ctx , fmt .Errorf ("failed to list public images: %w" , err ),
1343- v1 .LogField ("publicImagesParent" , publicImagesParent ))
1344- return "" , fmt .Errorf ("failed to list public images: %w" , err )
1345- }
1346-
1347- totalCount := len (imagesResp .GetItems ())
1348- c .logger .Info (ctx , "getWorkingPublicImageID: list returned" ,
1349- v1 .LogField ("totalImages" , totalCount ))
1350-
1351- if totalCount == 0 {
1352- return "" , fmt .Errorf ("no public images available" )
1353- }
1354-
13551338 requestedLower := strings .ToLower (requestedImage )
13561339
13571340 var bestImage * compute.Image
13581341 bestScore := - 1
1359- consideredCount , arm64Skipped , nilMetadataSkipped := 0 , 0 , 0
1342+ totalCount , consideredCount , arm64Skipped , nilMetadataSkipped := 0 , 0 , 0 , 0
1343+ var iterErr error
1344+
1345+ // Filter auto-paginates via the SDK. Using List directly only returns the first
1346+ // page (small default size), which can omit ubuntu24.04-cuda13.0 entirely.
1347+ imageIter := c .sdk .Services ().Compute ().V1 ().Image ().Filter (ctx , & compute.ListImagesRequest {
1348+ ParentId : publicImagesParent ,
1349+ PageSize : 1000 ,
1350+ })
1351+ imageIter (func (image * compute.Image , err error ) bool {
1352+ if err != nil {
1353+ iterErr = err
1354+ return false
1355+ }
1356+ totalCount ++
13601357
1361- for _ , image := range imagesResp .GetItems () {
13621358 if image .Metadata == nil {
13631359 nilMetadataSkipped ++
1364- continue
1360+ return true
13651361 }
13661362 if image .Spec != nil && image .Spec .GetCpuArchitecture () == compute .ImageSpec_ARM64 {
13671363 arm64Skipped ++
1368- continue
1364+ return true
13691365 }
13701366 consideredCount ++
13711367
@@ -1384,9 +1380,17 @@ func (c *NebiusClient) getWorkingPublicImageID(ctx context.Context, requestedIma
13841380 bestScore = score
13851381 bestImage = image
13861382 }
1383+ return true
1384+ })
1385+
1386+ if iterErr != nil {
1387+ c .logger .Error (ctx , fmt .Errorf ("failed to iterate public images: %w" , iterErr ),
1388+ v1 .LogField ("publicImagesParent" , publicImagesParent ))
1389+ return "" , fmt .Errorf ("failed to iterate public images: %w" , iterErr )
13871390 }
13881391
13891392 c .logger .Info (ctx , "getWorkingPublicImageID: scoring summary" ,
1393+ v1 .LogField ("totalImages" , totalCount ),
13901394 v1 .LogField ("consideredCount" , consideredCount ),
13911395 v1 .LogField ("arm64Skipped" , arm64Skipped ),
13921396 v1 .LogField ("nilMetadataSkipped" , nilMetadataSkipped ),
0 commit comments