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 }