Merge pull request #31482 from ripcurld0/add_format_to_system_df

Add format to the docker system df command
This commit is contained in:
Sebastiaan van Stijn
2017-04-13 10:08:11 -07:00
committed by GitHub
3 changed files with 123 additions and 14 deletions
+26 -7
View File
@@ -45,15 +45,33 @@ func (ctx *DiskUsageContext) startSubsection(format string) (*template.Template,
return ctx.parseFormat()
}
func (ctx *DiskUsageContext) Write() {
//
// NewDiskUsageFormat returns a format for rendering an DiskUsageContext
func NewDiskUsageFormat(source string) Format {
switch source {
case TableFormatKey:
format := defaultDiskUsageTableFormat
return Format(format)
case RawFormatKey:
format := `type: {{.Type}}
total: {{.TotalCount}}
active: {{.Active}}
size: {{.Size}}
reclaimable: {{.Reclaimable}}
`
return Format(format)
}
return Format(source)
}
func (ctx *DiskUsageContext) Write() (err error) {
if ctx.Verbose == false {
ctx.buffer = bytes.NewBufferString("")
ctx.Format = defaultDiskUsageTableFormat
ctx.preFormat()
tmpl, err := ctx.parseFormat()
if err != nil {
return
return err
}
err = ctx.contextFormat(tmpl, &diskUsageImagesContext{
@@ -61,20 +79,20 @@ func (ctx *DiskUsageContext) Write() {
images: ctx.Images,
})
if err != nil {
return
return err
}
err = ctx.contextFormat(tmpl, &diskUsageContainersContext{
containers: ctx.Containers,
})
if err != nil {
return
return err
}
err = ctx.contextFormat(tmpl, &diskUsageVolumesContext{
volumes: ctx.Volumes,
})
if err != nil {
return
return err
}
diskUsageContainersCtx := diskUsageContainersContext{containers: []*types.Container{}}
@@ -87,7 +105,7 @@ func (ctx *DiskUsageContext) Write() {
}
ctx.postFormat(tmpl, &diskUsageContainersCtx)
return
return err
}
// First images
@@ -158,6 +176,7 @@ func (ctx *DiskUsageContext) Write() {
}
}
ctx.postFormat(tmpl, newVolumeContext())
return
}
type diskUsageImagesContext struct {
+82 -4
View File
@@ -8,13 +8,17 @@ import (
)
func TestDiskUsageContextFormatWrite(t *testing.T) {
// Check default output format (verbose and non-verbose mode) for table headers
cases := []struct {
context DiskUsageContext
expected string
}{
// Check default output format (verbose and non-verbose mode) for table headers
{
DiskUsageContext{Verbose: false},
DiskUsageContext{
Context: Context{
Format: NewDiskUsageFormat("table"),
},
Verbose: false},
`TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
@@ -34,6 +38,77 @@ CONTAINER ID IMAGE COMMAND LOCAL VOLUMES
Local Volumes space usage:
VOLUME NAME LINKS SIZE
`,
},
// Errors
{
DiskUsageContext{
Context: Context{
Format: "{{InvalidFunction}}",
},
},
`Template parsing error: template: :1: function "InvalidFunction" not defined
`,
},
{
DiskUsageContext{
Context: Context{
Format: "{{nil}}",
},
},
`Template parsing error: template: :1:2: executing "" at <nil>: nil is not a command
`,
},
// Table Format
{
DiskUsageContext{
Context: Context{
Format: NewDiskUsageFormat("table"),
},
},
`TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 0 0 0B 0B
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
`,
},
{
DiskUsageContext{
Context: Context{
Format: NewDiskUsageFormat("table {{.Type}}\t{{.Active}}"),
},
},
`TYPE ACTIVE
Images 0
Containers 0
Local Volumes 0
`,
},
// Raw Format
{
DiskUsageContext{
Context: Context{
Format: NewDiskUsageFormat("raw"),
},
},
`type: Images
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Containers
total: 0
active: 0
size: 0B
reclaimable: 0B
type: Local Volumes
total: 0
active: 0
size: 0B
reclaimable: 0B
`,
},
}
@@ -41,7 +116,10 @@ VOLUME NAME LINKS SIZE
for _, testcase := range cases {
out := bytes.NewBufferString("")
testcase.context.Output = out
testcase.context.Write()
assert.Equal(t, out.String(), testcase.expected)
if err := testcase.context.Write(); err != nil {
assert.Equal(t, err.Error(), testcase.expected)
} else {
assert.Equal(t, out.String(), testcase.expected)
}
}
}