func (r *FakeRuntimeService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([]*runtimeApi.PodSandbox, error) { r.Lock() defer r.Unlock() r.Called = append(r.Called, "ListPodSandbox") result := make([]*runtimeApi.PodSandbox, 0) for id, s := range r.Sandboxes { if filter != nil { if filter.Id != nil && filter.GetId() != id { continue } if filter.Name != nil && filter.GetName() != s.Metadata.GetName() { continue } if filter.State != nil && filter.GetState() != s.GetState() { continue } if filter.LabelSelector != nil && !filterInLabels(filter.LabelSelector, s.GetLabels()) { continue } } result = append(result, &runtimeApi.PodSandbox{ Id: s.Id, Metadata: s.Metadata, State: s.State, CreatedAt: s.CreatedAt, Labels: s.Labels, }) } return result, nil }
// ListPodSandbox returns a list of Sandbox. func (ds *dockerService) ListPodSandbox(filter *runtimeApi.PodSandboxFilter) ([]*runtimeApi.PodSandbox, error) { // By default, list all containers whether they are running or not. opts := dockertypes.ContainerListOptions{All: true} filterOutReadySandboxes := false opts.Filter = dockerfilters.NewArgs() f := newDockerFilter(&opts.Filter) // Add filter to select only sandbox containers. f.AddLabel(containerTypeLabelKey, containerTypeLabelSandbox) if filter != nil { if filter.Id != nil { f.Add("id", filter.GetId()) } if filter.State != nil { if filter.GetState() == runtimeApi.PodSandBoxState_READY { // Only list running containers. opts.All = false } else { // runtimeApi.PodSandBoxState_NOTREADY can mean the // container is in any of the non-running state (e.g., created, // exited). We can't tell docker to filter out running // containers directly, so we'll need to filter them out // ourselves after getting the results. filterOutReadySandboxes = true } } if filter.LabelSelector != nil { for k, v := range filter.LabelSelector { f.AddLabel(k, v) } } } containers, err := ds.client.ListContainers(opts) if err != nil { return nil, err } // Convert docker containers to runtime api sandboxes. result := []*runtimeApi.PodSandbox{} for i := range containers { c := containers[i] converted, err := toRuntimeAPISandbox(&c) if err != nil { glog.V(5).Infof("Unable to convert docker to runtime API sandbox: %v", err) continue } if filterOutReadySandboxes && converted.GetState() == runtimeApi.PodSandBoxState_READY { continue } result = append(result, converted) } return result, nil }