Add CRIImageService.RemoveImage()

Signed-off-by: Kirtana Ashok <kiashok@microsoft.com>
This commit is contained in:
Kirtana Ashok 2024-02-07 16:37:07 -08:00
parent b3f1c15b6a
commit b9dfba5b80

View File

@ -34,17 +34,24 @@ import (
// Remove the whole image no matter the it's image id or reference. This is the // Remove the whole image no matter the it's image id or reference. This is the
// semantic defined in CRI now. // semantic defined in CRI now.
func (c *GRPCCRIImageService) RemoveImage(ctx context.Context, r *runtime.RemoveImageRequest) (*runtime.RemoveImageResponse, error) { func (c *GRPCCRIImageService) RemoveImage(ctx context.Context, r *runtime.RemoveImageRequest) (*runtime.RemoveImageResponse, error) {
err := c.CRIImageService.RemoveImage(ctx, r.GetImage())
if err != nil && !errdefs.IsNotFound(err) {
return nil, err
}
return &runtime.RemoveImageResponse{}, nil
}
func (c *CRIImageService) RemoveImage(ctx context.Context, imageSpec *runtime.ImageSpec) error {
span := tracing.SpanFromContext(ctx) span := tracing.SpanFromContext(ctx)
// TODO: Move to separate function image, err := c.LocalResolve(imageSpec.GetImage())
image, err := c.LocalResolve(r.GetImage().GetImage())
if err != nil { if err != nil {
if errdefs.IsNotFound(err) { if errdefs.IsNotFound(err) {
span.AddEvent(err.Error()) span.AddEvent(err.Error())
// return empty without error when image not found. // return empty without error when image not found.
return &runtime.RemoveImageResponse{}, nil return nil
} }
return nil, fmt.Errorf("can not resolve %q locally: %w", r.GetImage().GetImage(), err) return fmt.Errorf("can not resolve %q locally: %w", imageSpec.GetImage(), err)
} }
span.SetAttributes(tracing.Attribute("image.id", image.ID)) span.SetAttributes(tracing.Attribute("image.id", image.ID))
// Remove all image references. // Remove all image references.
@ -60,11 +67,11 @@ func (c *GRPCCRIImageService) RemoveImage(ctx context.Context, r *runtime.Remove
if err == nil || errdefs.IsNotFound(err) { if err == nil || errdefs.IsNotFound(err) {
// Update image store to reflect the newest state in containerd. // Update image store to reflect the newest state in containerd.
if err := c.imageStore.Update(ctx, ref); err != nil { if err := c.imageStore.Update(ctx, ref); err != nil {
return nil, fmt.Errorf("failed to update image reference %q for %q: %w", ref, image.ID, err) return fmt.Errorf("failed to update image reference %q for %q: %w", ref, image.ID, err)
} }
continue continue
} }
return nil, fmt.Errorf("failed to delete image reference %q for %q: %w", ref, image.ID, err) return fmt.Errorf("failed to delete image reference %q for %q: %w", ref, image.ID, err)
} }
return &runtime.RemoveImageResponse{}, nil return nil
} }