mirror of https://github.com/containers/podman.git
				
				
				
			Fix regression in ps with custom format
Using the table keyword in go templating had regressed and was no longer working. Fixes: 2221 Signed-off-by: baude <bbaude@redhat.com>
This commit is contained in:
		
							parent
							
								
									ad5579e1d9
								
							
						
					
					
						commit
						ca53122338
					
				| 
						 | 
				
			
			@ -188,13 +188,6 @@ func imagesCmd(c *cli.Context) error {
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	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()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		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 {
 | 
			
		||||
	out := template.New("output")
 | 
			
		||||
	out, err := out.Parse(format + "\n")
 | 
			
		||||
	// return immediately if no containers are present
 | 
			
		||||
	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 {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	for _, container := range containers {
 | 
			
		||||
		if err := out.Execute(os.Stdout, container); err != nil {
 | 
			
		||||
		if err := headerTmpl.Execute(w, headerNames); 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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,6 +7,7 @@ import (
 | 
			
		|||
	"os"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	. "github.com/containers/libpod/test/utils"
 | 
			
		||||
	"github.com/docker/go-units"
 | 
			
		||||
| 
						 | 
				
			
			@ -148,10 +149,12 @@ var _ = Describe("Podman ps", func() {
 | 
			
		|||
		_, ec, _ := podmanTest.RunLsContainer("test1")
 | 
			
		||||
		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()
 | 
			
		||||
		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.IsJSONOutputValid()).To(BeTrue())
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	It("podman ps ancestor filter flag", func() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue