github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/pkg/api/handlers/utils/pods.go (about) 1 package utils 2 3 import ( 4 "net/http" 5 6 "github.com/containers/podman/v2/libpod" 7 lpfilters "github.com/containers/podman/v2/libpod/filters" 8 "github.com/containers/podman/v2/pkg/domain/entities" 9 "github.com/gorilla/schema" 10 ) 11 12 func GetPods(w http.ResponseWriter, r *http.Request) ([]*entities.ListPodsReport, error) { 13 var ( 14 pods []*libpod.Pod 15 ) 16 runtime := r.Context().Value("runtime").(*libpod.Runtime) 17 decoder := r.Context().Value("decoder").(*schema.Decoder) 18 19 query := struct { 20 All bool 21 Filters map[string][]string `schema:"filters"` 22 Digests bool 23 }{} 24 25 if err := decoder.Decode(&query, r.URL.Query()); err != nil { 26 return nil, err 27 } 28 if _, found := r.URL.Query()["digests"]; found && query.Digests { 29 UnSupportedParameter("digests") 30 } 31 32 filters := make([]libpod.PodFilter, 0, len(query.Filters)) 33 for k, v := range query.Filters { 34 f, err := lpfilters.GeneratePodFilterFunc(k, v) 35 if err != nil { 36 return nil, err 37 } 38 filters = append(filters, f) 39 } 40 pods, err := runtime.Pods(filters...) 41 if err != nil { 42 return nil, err 43 } 44 45 if len(pods) == 0 { 46 return []*entities.ListPodsReport{}, nil 47 } 48 49 lps := make([]*entities.ListPodsReport, 0, len(pods)) 50 for _, pod := range pods { 51 status, err := pod.GetPodStatus() 52 if err != nil { 53 return nil, err 54 } 55 ctrs, err := pod.AllContainers() 56 if err != nil { 57 return nil, err 58 } 59 infraID, err := pod.InfraContainerID() 60 if err != nil { 61 return nil, err 62 } 63 lp := entities.ListPodsReport{ 64 Cgroup: pod.CgroupParent(), 65 Created: pod.CreatedTime(), 66 Id: pod.ID(), 67 Name: pod.Name(), 68 Namespace: pod.Namespace(), 69 Status: status, 70 InfraId: infraID, 71 Labels: pod.Labels(), 72 } 73 for _, ctr := range ctrs { 74 state, err := ctr.State() 75 if err != nil { 76 return nil, err 77 } 78 lp.Containers = append(lp.Containers, &entities.ListPodContainer{ 79 Id: ctr.ID(), 80 Names: ctr.Name(), 81 Status: state.String(), 82 }) 83 } 84 lps = append(lps, &lp) 85 } 86 return lps, nil 87 }