images --format compatible with docker
This patch lets valid values of --format be compatible with docker. Replace CreatedTime with CreatedAt, Created with CreatedSince. Keep CreatedTime and Created are valid as hidden options. Signed-off-by: Qi Wang <qiwan@redhat.com>
This commit is contained in:
parent
e57253d068
commit
3afd1b5a7c
|
@ -26,8 +26,8 @@ type imagesTemplateParams struct {
|
||||||
ID string
|
ID string
|
||||||
Digest digest.Digest
|
Digest digest.Digest
|
||||||
Digests []digest.Digest
|
Digests []digest.Digest
|
||||||
Created string
|
CreatedAt time.Time
|
||||||
CreatedTime time.Time
|
CreatedSince string
|
||||||
Size string
|
Size string
|
||||||
ReadOnly bool
|
ReadOnly bool
|
||||||
History string
|
History string
|
||||||
|
@ -65,7 +65,7 @@ func (a imagesSorted) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
||||||
type imagesSortedCreated struct{ imagesSorted }
|
type imagesSortedCreated struct{ imagesSorted }
|
||||||
|
|
||||||
func (a imagesSortedCreated) Less(i, j int) bool {
|
func (a imagesSortedCreated) Less(i, j int) bool {
|
||||||
return a.imagesSorted[i].CreatedTime.After(a.imagesSorted[j].CreatedTime)
|
return a.imagesSorted[i].CreatedAt.After(a.imagesSorted[j].CreatedAt)
|
||||||
}
|
}
|
||||||
|
|
||||||
type imagesSortedID struct{ imagesSorted }
|
type imagesSortedID struct{ imagesSorted }
|
||||||
|
@ -185,7 +185,17 @@ func imagesCmd(c *cliconfig.ImagesValues) error {
|
||||||
history: c.History,
|
history: c.History,
|
||||||
}
|
}
|
||||||
|
|
||||||
opts.outputformat = opts.setOutputFormat()
|
outputformat := opts.setOutputFormat()
|
||||||
|
// These fields were renamed, so we need to provide backward compat for
|
||||||
|
// the old names.
|
||||||
|
if strings.Contains(outputformat, "{{.Created}}") {
|
||||||
|
outputformat = strings.Replace(outputformat, "{{.Created}}", "{{.CreatedSince}}", -1)
|
||||||
|
}
|
||||||
|
if strings.Contains(outputformat, "{{.CreatedTime}}") {
|
||||||
|
outputformat = strings.Replace(outputformat, "{{.CreatedTime}}", "{{.CreatedAt}}", -1)
|
||||||
|
}
|
||||||
|
opts.outputformat = outputformat
|
||||||
|
|
||||||
filteredImages, err := runtime.GetFilteredImages(filters, false)
|
filteredImages, err := runtime.GetFilteredImages(filters, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "unable to get images")
|
return errors.Wrapf(err, "unable to get images")
|
||||||
|
@ -216,7 +226,7 @@ func (i imagesOptions) setOutputFormat() string {
|
||||||
if i.digests {
|
if i.digests {
|
||||||
format += "{{.Digest}}\t"
|
format += "{{.Digest}}\t"
|
||||||
}
|
}
|
||||||
format += "{{.ID}}\t{{.Created}}\t{{.Size}}\t"
|
format += "{{.ID}}\t{{.CreatedSince}}\t{{.Size}}\t"
|
||||||
if i.history {
|
if i.history {
|
||||||
format += "{{if .History}}{{.History}}{{else}}<none>{{end}}\t"
|
format += "{{if .History}}{{.History}}{{else}}<none>{{end}}\t"
|
||||||
}
|
}
|
||||||
|
@ -306,8 +316,8 @@ func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerIma
|
||||||
ID: imageID,
|
ID: imageID,
|
||||||
Digest: imageDigest,
|
Digest: imageDigest,
|
||||||
Digests: img.Digests(),
|
Digests: img.Digests(),
|
||||||
CreatedTime: createdTime,
|
CreatedAt: createdTime,
|
||||||
Created: units.HumanDuration(time.Since(createdTime)) + " ago",
|
CreatedSince: units.HumanDuration(time.Since(createdTime)) + " ago",
|
||||||
Size: sizeStr,
|
Size: sizeStr,
|
||||||
ReadOnly: img.IsReadOnly(),
|
ReadOnly: img.IsReadOnly(),
|
||||||
History: strings.Join(img.NamesHistory(), ", "),
|
History: strings.Join(img.NamesHistory(), ", "),
|
||||||
|
@ -384,6 +394,9 @@ func GenImageOutputMap() map[string]string {
|
||||||
values[key] = "R/O"
|
values[key] = "R/O"
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
if value == "CreatedSince" {
|
||||||
|
value = "created"
|
||||||
|
}
|
||||||
values[key] = strings.ToUpper(splitCamelCase(value))
|
values[key] = strings.ToUpper(splitCamelCase(value))
|
||||||
}
|
}
|
||||||
return values
|
return values
|
||||||
|
|
|
@ -51,6 +51,18 @@ Filter output based on conditions provided
|
||||||
|
|
||||||
Change the default output format. This can be of a supported type like 'json'
|
Change the default output format. This can be of a supported type like 'json'
|
||||||
or a Go template.
|
or a Go template.
|
||||||
|
Valid placeholders for the Go template are listed below:
|
||||||
|
|
||||||
|
| **Placeholder** | **Description** |
|
||||||
|
| --------------- | ----------------------------------------------------------------------------- |
|
||||||
|
| .ID | Image ID |
|
||||||
|
| .Repository | Image repository |
|
||||||
|
| .Tag | Image tag |
|
||||||
|
| .Digest | Image digest |
|
||||||
|
| .CreatedSince | Elapsed time since the image was created |
|
||||||
|
| .CreatedAt | Time when the image was created |
|
||||||
|
| .Size | Size of layer on disk |
|
||||||
|
| .History | History of the image layer |
|
||||||
|
|
||||||
**--history**
|
**--history**
|
||||||
|
|
||||||
|
|
|
@ -116,7 +116,8 @@ var _ = Describe("Podman images", func() {
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman images in GO template format", func() {
|
It("podman images in GO template format", func() {
|
||||||
session := podmanTest.Podman([]string{"images", "--format={{.ID}}"})
|
formatStr := "{{.ID}}\t{{.Created}}\t{{.CreatedAt}}\t{{.CreatedSince}}\t{{.CreatedTime}}"
|
||||||
|
session := podmanTest.Podman([]string{"images", fmt.Sprintf("--format=%s", formatStr)})
|
||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
Expect(session.ExitCode()).To(Equal(0))
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
})
|
})
|
||||||
|
@ -280,7 +281,7 @@ RUN apk update && apk add man
|
||||||
return session.OutputToStringArray()
|
return session.OutputToStringArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
sortedArr := sortValueTest("created", 0, "CreatedTime")
|
sortedArr := sortValueTest("created", 0, "CreatedAt")
|
||||||
Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] > sortedArr[j] })).To(BeTrue())
|
Expect(sort.SliceIsSorted(sortedArr, func(i, j int) bool { return sortedArr[i] > sortedArr[j] })).To(BeTrue())
|
||||||
|
|
||||||
sortedArr = sortValueTest("id", 0, "ID")
|
sortedArr = sortValueTest("id", 0, "ID")
|
||||||
|
|
Loading…
Reference in New Issue