Merge pull request #8263 from jfrazelle/filter-status-name
Filter containers by status. Upstream-commit: e32b54fe35a8632f4d512e081c5325e36b67cf44 Component: engine
This commit is contained in:
@@ -28,6 +28,7 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
|
||||
size = job.GetenvBool("size")
|
||||
psFilters filters.Args
|
||||
filt_exited []int
|
||||
filt_status []string
|
||||
)
|
||||
outs := engine.NewTable("Created", 0)
|
||||
|
||||
@@ -45,6 +46,8 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
|
||||
}
|
||||
}
|
||||
|
||||
filt_status, _ = psFilters["status"]
|
||||
|
||||
names := map[string][]string{}
|
||||
daemon.ContainerGraph().Walk("/", func(p string, e *graphdb.Entity) error {
|
||||
names[e.ID()] = append(names[e.ID()], p)
|
||||
@@ -99,6 +102,11 @@ func (daemon *Daemon) Containers(job *engine.Job) engine.Status {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
for _, status := range filt_status {
|
||||
if container.State.StateString() != strings.ToLower(status) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
displayed++
|
||||
out := &engine.Env{}
|
||||
out.Set("Id", container.ID)
|
||||
|
||||
@@ -46,6 +46,20 @@ func (s *State) String() string {
|
||||
return fmt.Sprintf("Exited (%d) %s ago", s.ExitCode, units.HumanDuration(time.Now().UTC().Sub(s.FinishedAt)))
|
||||
}
|
||||
|
||||
// StateString returns a single string to describe state
|
||||
func (s *State) StateString() string {
|
||||
if s.Running {
|
||||
if s.Paused {
|
||||
return "paused"
|
||||
}
|
||||
if s.Restarting {
|
||||
return "restarting"
|
||||
}
|
||||
return "running"
|
||||
}
|
||||
return "exited"
|
||||
}
|
||||
|
||||
func wait(waitChan <-chan struct{}, timeout time.Duration) error {
|
||||
if timeout < 0 {
|
||||
<-waitChan
|
||||
|
||||
Reference in New Issue
Block a user