Merge pull request #30733 from yongtang/02022017-formatter-header
Allow `--format` to use different delim in `table` format
This commit is contained in:
@@ -15,7 +15,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
defaultContainerTableFormat = "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.RunningFor}} ago\t{{.Status}}\t{{.Ports}}\t{{.Names}}"
|
||||
defaultContainerTableFormat = "table {{.ID}}\t{{.Image}}\t{{.Command}}\t{{.RunningFor}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}"
|
||||
|
||||
containerIDHeader = "CONTAINER ID"
|
||||
namesHeader = "NAMES"
|
||||
@@ -72,7 +72,17 @@ func ContainerWrite(ctx Context, containers []types.Container) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return ctx.Write(&containerContext{}, render)
|
||||
return ctx.Write(newContainerContext(), render)
|
||||
}
|
||||
|
||||
type containerHeaderContext map[string]string
|
||||
|
||||
func (c containerHeaderContext) Label(name string) string {
|
||||
n := strings.Split(name, ".")
|
||||
r := strings.NewReplacer("-", " ", "_", " ")
|
||||
h := r.Replace(n[len(n)-1])
|
||||
|
||||
return h
|
||||
}
|
||||
|
||||
type containerContext struct {
|
||||
@@ -81,12 +91,31 @@ type containerContext struct {
|
||||
c types.Container
|
||||
}
|
||||
|
||||
func newContainerContext() *containerContext {
|
||||
containerCtx := containerContext{}
|
||||
containerCtx.header = containerHeaderContext{
|
||||
"ID": containerIDHeader,
|
||||
"Names": namesHeader,
|
||||
"Image": imageHeader,
|
||||
"Command": commandHeader,
|
||||
"CreatedAt": createdAtHeader,
|
||||
"RunningFor": runningForHeader,
|
||||
"Ports": portsHeader,
|
||||
"Status": statusHeader,
|
||||
"Size": sizeHeader,
|
||||
"Labels": labelsHeader,
|
||||
"Mounts": mountsHeader,
|
||||
"LocalVolumes": localVolumes,
|
||||
"Networks": networksHeader,
|
||||
}
|
||||
return &containerCtx
|
||||
}
|
||||
|
||||
func (c *containerContext) MarshalJSON() ([]byte, error) {
|
||||
return marshalJSON(c)
|
||||
}
|
||||
|
||||
func (c *containerContext) ID() string {
|
||||
c.AddHeader(containerIDHeader)
|
||||
if c.trunc {
|
||||
return stringid.TruncateID(c.c.ID)
|
||||
}
|
||||
@@ -94,7 +123,6 @@ func (c *containerContext) ID() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Names() string {
|
||||
c.AddHeader(namesHeader)
|
||||
names := stripNamePrefix(c.c.Names)
|
||||
if c.trunc {
|
||||
for _, name := range names {
|
||||
@@ -108,7 +136,6 @@ func (c *containerContext) Names() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Image() string {
|
||||
c.AddHeader(imageHeader)
|
||||
if c.c.Image == "" {
|
||||
return "<no image>"
|
||||
}
|
||||
@@ -136,7 +163,6 @@ func (c *containerContext) Image() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Command() string {
|
||||
c.AddHeader(commandHeader)
|
||||
command := c.c.Command
|
||||
if c.trunc {
|
||||
command = stringutils.Ellipsis(command, 20)
|
||||
@@ -145,28 +171,23 @@ func (c *containerContext) Command() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) CreatedAt() string {
|
||||
c.AddHeader(createdAtHeader)
|
||||
return time.Unix(int64(c.c.Created), 0).String()
|
||||
}
|
||||
|
||||
func (c *containerContext) RunningFor() string {
|
||||
c.AddHeader(runningForHeader)
|
||||
createdAt := time.Unix(int64(c.c.Created), 0)
|
||||
return units.HumanDuration(time.Now().UTC().Sub(createdAt))
|
||||
return units.HumanDuration(time.Now().UTC().Sub(createdAt)) + " ago"
|
||||
}
|
||||
|
||||
func (c *containerContext) Ports() string {
|
||||
c.AddHeader(portsHeader)
|
||||
return api.DisplayablePorts(c.c.Ports)
|
||||
}
|
||||
|
||||
func (c *containerContext) Status() string {
|
||||
c.AddHeader(statusHeader)
|
||||
return c.c.Status
|
||||
}
|
||||
|
||||
func (c *containerContext) Size() string {
|
||||
c.AddHeader(sizeHeader)
|
||||
srw := units.HumanSizeWithPrecision(float64(c.c.SizeRw), 3)
|
||||
sv := units.HumanSizeWithPrecision(float64(c.c.SizeRootFs), 3)
|
||||
|
||||
@@ -178,7 +199,6 @@ func (c *containerContext) Size() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Labels() string {
|
||||
c.AddHeader(labelsHeader)
|
||||
if c.c.Labels == nil {
|
||||
return ""
|
||||
}
|
||||
@@ -191,12 +211,6 @@ func (c *containerContext) Labels() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Label(name string) string {
|
||||
n := strings.Split(name, ".")
|
||||
r := strings.NewReplacer("-", " ", "_", " ")
|
||||
h := r.Replace(n[len(n)-1])
|
||||
|
||||
c.AddHeader(h)
|
||||
|
||||
if c.c.Labels == nil {
|
||||
return ""
|
||||
}
|
||||
@@ -204,8 +218,6 @@ func (c *containerContext) Label(name string) string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Mounts() string {
|
||||
c.AddHeader(mountsHeader)
|
||||
|
||||
var name string
|
||||
var mounts []string
|
||||
for _, m := range c.c.Mounts {
|
||||
@@ -223,8 +235,6 @@ func (c *containerContext) Mounts() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) LocalVolumes() string {
|
||||
c.AddHeader(localVolumes)
|
||||
|
||||
count := 0
|
||||
for _, m := range c.c.Mounts {
|
||||
if m.Driver == "local" {
|
||||
@@ -236,8 +246,6 @@ func (c *containerContext) LocalVolumes() string {
|
||||
}
|
||||
|
||||
func (c *containerContext) Networks() string {
|
||||
c.AddHeader(networksHeader)
|
||||
|
||||
if c.c.NetworkSettings == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user