github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/domain/infra/abi/images_list.go (about)

     1  package abi
     2  
     3  import (
     4  	"context"
     5  
     6  	libpodImage "github.com/containers/podman/v2/libpod/image"
     7  	"github.com/containers/podman/v2/pkg/domain/entities"
     8  	"github.com/pkg/errors"
     9  )
    10  
    11  func (ir *ImageEngine) List(ctx context.Context, opts entities.ImageListOptions) ([]*entities.ImageSummary, error) {
    12  	images, err := ir.Libpod.ImageRuntime().GetImagesWithFilters(opts.Filter)
    13  	if err != nil {
    14  		return nil, err
    15  	}
    16  
    17  	if !opts.All {
    18  		filter, err := ir.Libpod.ImageRuntime().IntermediateFilter(ctx, images)
    19  		if err != nil {
    20  			return nil, err
    21  		}
    22  		images = libpodImage.FilterImages(images, []libpodImage.ResultFilter{filter})
    23  	}
    24  
    25  	summaries := []*entities.ImageSummary{}
    26  	for _, img := range images {
    27  		digests := make([]string, len(img.Digests()))
    28  		for j, d := range img.Digests() {
    29  			digests[j] = string(d)
    30  		}
    31  
    32  		e := entities.ImageSummary{
    33  			ID:           img.ID(),
    34  			ConfigDigest: string(img.ConfigDigest),
    35  			Created:      img.Created().Unix(),
    36  			Dangling:     img.Dangling(),
    37  			Digest:       string(img.Digest()),
    38  			Digests:      digests,
    39  			History:      img.NamesHistory(),
    40  			Names:        img.Names(),
    41  			ParentId:     img.Parent,
    42  			ReadOnly:     img.IsReadOnly(),
    43  			SharedSize:   0,
    44  			VirtualSize:  img.VirtualSize,
    45  			RepoTags:     img.Names(), // may include tags and digests
    46  		}
    47  		e.Labels, err = img.Labels(ctx)
    48  		if err != nil {
    49  			return nil, errors.Wrapf(err, "error retrieving label for image %q: you may need to remove the image to resolve the error", img.ID())
    50  		}
    51  
    52  		ctnrs, err := img.Containers()
    53  		if err != nil {
    54  			return nil, errors.Wrapf(err, "error retrieving containers for image %q: you may need to remove the image to resolve the error", img.ID())
    55  		}
    56  		e.Containers = len(ctnrs)
    57  
    58  		sz, err := img.Size(ctx)
    59  		if err != nil {
    60  			return nil, errors.Wrapf(err, "error retrieving size of image %q: you may need to remove the image to resolve the error", img.ID())
    61  		}
    62  		e.Size = int64(*sz)
    63  
    64  		summaries = append(summaries, &e)
    65  	}
    66  	return summaries, nil
    67  }