Просмотр исходного кода

AWS API expects the length of imageIDs to be at max 100 at a time

Mohammed Nafees 3 лет назад
Родитель
Сommit
fc3fe03780
1 измененных файлов с 29 добавлено и 23 удалено
  1. 29 23
      internal/registry/registry.go

+ 29 - 23
internal/registry/registry.go

@@ -701,16 +701,27 @@ func (r *Registry) GetECRPaginatedImages(
 		return []*ptypes.Image{}, nil, nil
 	}
 
-	describeResp, err := svc.DescribeImages(&ecr.DescribeImagesInput{
-		RepositoryName: &repoName,
-		ImageIds:       resp.ImageIds,
-	})
+	imageIDLen := len(resp.ImageIds)
+	imageDetails := make([]*ecr.ImageDetail, imageIDLen)
+
+	// AWS API expects the length of imageIDs to be at max 100 at a time
+	for start := 0; start < imageIDLen; start += 100 {
+		end := start + 100
+		if end > imageIDLen {
+			end = imageIDLen
+		}
 
-	if err != nil {
-		return nil, nil, err
-	}
+		describeResp, err := svc.DescribeImages(&ecr.DescribeImagesInput{
+			RepositoryName: &repoName,
+			ImageIds:       resp.ImageIds[start:end],
+		})
 
-	imageDetails := describeResp.ImageDetails
+		if err != nil {
+			return nil, nil, err
+		}
+
+		imageDetails = append(imageDetails, describeResp.ImageDetails...)
+	}
 
 	res := make([]*ptypes.Image, 0)
 
@@ -782,34 +793,29 @@ func (r *Registry) listECRImages(repoName string, repo repository.Repository) ([
 		nextToken = resp.NextToken
 	}
 
-	describeResp, err := svc.DescribeImages(&ecr.DescribeImagesInput{
-		RepositoryName: &repoName,
-		ImageIds:       imageIDs,
-	})
-
-	if err != nil {
-		return nil, err
-	}
-
-	imageDetails := describeResp.ImageDetails
+	imageIDLen := len(imageIDs)
+	imageDetails := make([]*ecr.ImageDetail, imageIDLen)
 
-	nextToken = describeResp.NextToken
+	// AWS API expects the length of imageIDs to be at max 100 at a time
+	for start := 0; start < imageIDLen; start += 100 {
+		end := start + 100
+		if end > imageIDLen {
+			end = imageIDLen
+		}
 
-	for nextToken != nil {
 		describeResp, err := svc.DescribeImages(&ecr.DescribeImagesInput{
 			RepositoryName: &repoName,
-			NextToken:      nextToken,
+			ImageIds:       imageIDs[start:end],
 		})
 
 		if err != nil {
 			return nil, err
 		}
 
-		nextToken = describeResp.NextToken
 		imageDetails = append(imageDetails, describeResp.ImageDetails...)
 	}
 
-	res := make([]*ptypes.Image, 0)
+	res := make([]*ptypes.Image, len(imageDetails))
 
 	for _, img := range imageDetails {
 		for _, tag := range img.ImageTags {