Fix error when image has already been pulled

CRI and containerd APIs disagree about the registry names - CRI supports
index.docker.io as an alias for docker.io, while containerd does not.
Use the actual stored RepoTag to determine what image to ask containerd for.

Signed-off-by: Brad Davidson <brad.davidson@rancher.com>
This commit is contained in:
Brad Davidson 2024-03-22 22:06:07 +00:00 committed by Brad Davidson
parent 65cd606832
commit f099bfa508

View File

@ -353,19 +353,23 @@ func prePullImages(ctx context.Context, client *containerd.Client, imageClient r
scanner := bufio.NewScanner(imageList)
for scanner.Scan() {
name := strings.TrimSpace(scanner.Text())
if _, err := imageClient.ImageStatus(ctx, &runtimeapi.ImageStatusRequest{
if status, err := imageClient.ImageStatus(ctx, &runtimeapi.ImageStatusRequest{
Image: &runtimeapi.ImageSpec{
Image: name,
},
}); err == nil {
}); err == nil && status.Image != nil && len(status.Image.RepoTags) > 0 {
logrus.Infof("Image %s has already been pulled", name)
if image, err := imageService.Get(ctx, name); err != nil {
errs = append(errs, err)
} else {
images = append(images, image)
for _, tag := range status.Image.RepoTags {
if image, err := imageService.Get(ctx, tag); err != nil {
errs = append(errs, err)
} else {
images = append(images, image)
}
}
continue
}
logrus.Infof("Pulling image %s", name)
if _, err := imageClient.PullImage(ctx, &runtimeapi.PullImageRequest{
Image: &runtimeapi.ImageSpec{