mirror of
https://github.com/containers/podman.git
synced 2025-06-24 11:28:24 +08:00
Merge pull request #2232 from baude/pstable
Fix regression in ps with custom format
This commit is contained in:
@ -188,13 +188,6 @@ func imagesCmd(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
opts.outputformat = opts.setOutputFormat()
|
opts.outputformat = opts.setOutputFormat()
|
||||||
/*
|
|
||||||
podman does not implement --all for images
|
|
||||||
|
|
||||||
intermediate images are only generated during the build process. they are
|
|
||||||
children to the image once built. until buildah supports caching builds,
|
|
||||||
it will not generate these intermediate images.
|
|
||||||
*/
|
|
||||||
images, err := runtime.GetImages()
|
images, err := runtime.GetImages()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "unable to get images")
|
return errors.Wrapf(err, "unable to get images")
|
||||||
|
@ -606,19 +606,50 @@ func portsToString(ports []ocicni.PortMapping) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func printFormat(format string, containers []shared.PsContainerOutput) error {
|
func printFormat(format string, containers []shared.PsContainerOutput) error {
|
||||||
out := template.New("output")
|
// return immediately if no containers are present
|
||||||
out, err := out.Parse(format + "\n")
|
if len(containers) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use a tabwriter to align column format
|
||||||
|
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', 0)
|
||||||
|
|
||||||
|
// Make a map of the field names for the headers
|
||||||
|
headerNames := make(map[string]string)
|
||||||
|
v := reflect.ValueOf(containers[0])
|
||||||
|
t := v.Type()
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
headerNames[t.Field(i).Name] = t.Field(i).Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spit out the header if "table" is present in the format
|
||||||
|
if strings.HasPrefix(format, "table") {
|
||||||
|
hformat := strings.Replace(strings.TrimSpace(format[5:]), " ", "\t", -1)
|
||||||
|
format = hformat
|
||||||
|
headerTmpl, err := template.New("header").Parse(hformat)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, container := range containers {
|
if err := headerTmpl.Execute(w, headerNames); err != nil {
|
||||||
if err := out.Execute(os.Stdout, container); err != nil {
|
return err
|
||||||
|
}
|
||||||
|
fmt.Fprintln(w, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Spit out the data rows now
|
||||||
|
dataTmpl, err := template.New("data").Parse(format)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for _, container := range containers {
|
||||||
|
if err := dataTmpl.Execute(w, container); err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
fmt.Fprintln(w, "")
|
||||||
|
}
|
||||||
|
// Flush the writer
|
||||||
|
return w.Flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
func dumpJSON(containers []shared.PsContainerOutput) error {
|
func dumpJSON(containers []shared.PsContainerOutput) error {
|
||||||
|
@ -7,6 +7,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"regexp"
|
"regexp"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
. "github.com/containers/libpod/test/utils"
|
. "github.com/containers/libpod/test/utils"
|
||||||
"github.com/docker/go-units"
|
"github.com/docker/go-units"
|
||||||
@ -148,10 +149,12 @@ var _ = Describe("Podman ps", func() {
|
|||||||
_, ec, _ := podmanTest.RunLsContainer("test1")
|
_, ec, _ := podmanTest.RunLsContainer("test1")
|
||||||
Expect(ec).To(Equal(0))
|
Expect(ec).To(Equal(0))
|
||||||
|
|
||||||
result := podmanTest.Podman([]string{"ps", "-a", "--format", "\"table {{.ID}} {{.Image}} {{.Labels}}\""})
|
result := podmanTest.Podman([]string{"ps", "-a", "--format", "table {{.ID}} {{.Image}} {{.Labels}}"})
|
||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
|
Expect(strings.Contains(result.OutputToStringArray()[0], "table")).To(BeFalse())
|
||||||
|
Expect(strings.Contains(result.OutputToStringArray()[0], "ID")).To(BeTrue())
|
||||||
|
Expect(strings.Contains(result.OutputToStringArray()[1], "alpine:latest")).To(BeTrue())
|
||||||
Expect(result.ExitCode()).To(Equal(0))
|
Expect(result.ExitCode()).To(Equal(0))
|
||||||
Expect(result.IsJSONOutputValid()).To(BeTrue())
|
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman ps ancestor filter flag", func() {
|
It("podman ps ancestor filter flag", func() {
|
||||||
|
Reference in New Issue
Block a user