2015-05-01 17:23:27 -04:00
|
|
|
package ps
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io"
|
|
|
|
|
|
|
|
"github.com/docker/docker/api/types"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
tableFormatKey = "table"
|
|
|
|
rawFormatKey = "raw"
|
|
|
|
|
|
|
|
defaultTableFormat = "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.RunningFor}} ago\t{{.Status}}\t{{.Ports}}\t{{.Names}}"
|
|
|
|
defaultQuietFormat = "{{.ID}}"
|
|
|
|
)
|
|
|
|
|
2015-07-20 20:55:30 -04:00
|
|
|
// Context contains information required by the formatter to print the output as desired.
|
2015-05-01 17:23:27 -04:00
|
|
|
type Context struct {
|
2015-07-20 20:55:30 -04:00
|
|
|
// Output is the output stream to which the formatted string is written.
|
2015-05-01 17:23:27 -04:00
|
|
|
Output io.Writer
|
2015-07-20 20:55:30 -04:00
|
|
|
// Format is used to choose raw, table or custom format for the output.
|
2015-05-01 17:23:27 -04:00
|
|
|
Format string
|
2015-07-20 20:55:30 -04:00
|
|
|
// Size when set to true will display the size of the output.
|
|
|
|
Size bool
|
|
|
|
// Quiet when set to true will simply print minimal information.
|
|
|
|
Quiet bool
|
|
|
|
// Trunc when set to true will truncate the output of certain fields such as Container ID.
|
|
|
|
Trunc bool
|
2015-05-01 17:23:27 -04:00
|
|
|
}
|
|
|
|
|
2015-07-20 20:55:30 -04:00
|
|
|
// Format helps to format the output using the parameters set in the Context.
|
|
|
|
// Currently Format allow to display in raw, table or custom format the output.
|
2015-05-01 17:23:27 -04:00
|
|
|
func Format(ctx Context, containers []types.Container) {
|
|
|
|
switch ctx.Format {
|
|
|
|
case tableFormatKey:
|
|
|
|
tableFormat(ctx, containers)
|
|
|
|
case rawFormatKey:
|
|
|
|
rawFormat(ctx, containers)
|
|
|
|
default:
|
|
|
|
customFormat(ctx, containers)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func rawFormat(ctx Context, containers []types.Container) {
|
|
|
|
if ctx.Quiet {
|
|
|
|
ctx.Format = `container_id: {{.ID}}`
|
|
|
|
} else {
|
|
|
|
ctx.Format = `container_id: {{.ID}}
|
|
|
|
image: {{.Image}}
|
|
|
|
command: {{.Command}}
|
|
|
|
created_at: {{.CreatedAt}}
|
|
|
|
status: {{.Status}}
|
|
|
|
names: {{.Names}}
|
|
|
|
labels: {{.Labels}}
|
|
|
|
ports: {{.Ports}}
|
|
|
|
`
|
|
|
|
if ctx.Size {
|
|
|
|
ctx.Format += `size: {{.Size}}
|
|
|
|
`
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
customFormat(ctx, containers)
|
|
|
|
}
|
|
|
|
|
|
|
|
func tableFormat(ctx Context, containers []types.Container) {
|
|
|
|
ctx.Format = defaultTableFormat
|
|
|
|
if ctx.Quiet {
|
|
|
|
ctx.Format = defaultQuietFormat
|
|
|
|
}
|
|
|
|
|
|
|
|
customFormat(ctx, containers)
|
|
|
|
}
|