github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/pkg/domain/infra/abi/images_list.go (about)

     1  // +build ABISupport
     2  
     3  package abi
     4  
     5  import (
     6  	"context"
     7  
     8  	libpodImage "github.com/containers/libpod/libpod/image"
     9  	"github.com/containers/libpod/pkg/domain/entities"
    10  )
    11  
    12  func (ir *ImageEngine) List(ctx context.Context, opts entities.ImageListOptions) ([]*entities.ImageSummary, error) {
    13  	var (
    14  		images []*libpodImage.Image
    15  		err    error
    16  	)
    17  
    18  	// TODO: Future work support for domain.Filters
    19  	// filters := utils.ToLibpodFilters(opts.Filters)
    20  
    21  	if len(opts.Filter) > 0 {
    22  		images, err = ir.Libpod.ImageRuntime().GetImagesWithFilters(opts.Filter)
    23  	} else {
    24  		images, err = ir.Libpod.ImageRuntime().GetImages()
    25  	}
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	summaries := make([]*entities.ImageSummary, len(images))
    31  	for i, img := range images {
    32  		var repoTags []string
    33  		if opts.All {
    34  			pairs, err := libpodImage.ReposToMap(img.Names())
    35  			if err != nil {
    36  				return nil, err
    37  			}
    38  
    39  			for repo, tags := range pairs {
    40  				for _, tag := range tags {
    41  					repoTags = append(repoTags, repo+":"+tag)
    42  				}
    43  			}
    44  		} else {
    45  			repoTags, _ = img.RepoTags()
    46  		}
    47  
    48  		digests := make([]string, len(img.Digests()))
    49  		for j, d := range img.Digests() {
    50  			digests[j] = string(d)
    51  		}
    52  
    53  		e := entities.ImageSummary{
    54  			ID: img.ID(),
    55  
    56  			ConfigDigest: string(img.ConfigDigest),
    57  			Created:      img.Created().Unix(),
    58  			Dangling:     img.Dangling(),
    59  			Digest:       string(img.Digest()),
    60  			Digests:      digests,
    61  			History:      img.NamesHistory(),
    62  			Names:        img.Names(),
    63  			ParentId:     img.Parent,
    64  			ReadOnly:     img.IsReadOnly(),
    65  			SharedSize:   0,
    66  			VirtualSize:  img.VirtualSize,
    67  			RepoTags:     repoTags,
    68  		}
    69  		e.Labels, _ = img.Labels(context.TODO())
    70  
    71  		ctnrs, _ := img.Containers()
    72  		e.Containers = len(ctnrs)
    73  
    74  		sz, _ := img.Size(context.TODO())
    75  		e.Size = int64(*sz)
    76  
    77  		summaries[i] = &e
    78  	}
    79  	return summaries, nil
    80  }