mirror of
https://github.com/containers/podman.git
synced 2025-07-15 03:02:52 +08:00
Merge pull request #10747 from jwhonce/wip/report
Add --format to connection list
This commit is contained in:
@ -1,11 +1,13 @@
|
||||
package connection
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/containers/common/pkg/completion"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/common/pkg/report"
|
||||
"github.com/containers/podman/v3/cmd/podman/common"
|
||||
"github.com/containers/podman/v3/cmd/podman/registry"
|
||||
"github.com/containers/podman/v3/cmd/podman/system"
|
||||
"github.com/containers/podman/v3/cmd/podman/validate"
|
||||
@ -14,13 +16,14 @@ import (
|
||||
|
||||
var (
|
||||
listCmd = &cobra.Command{
|
||||
Use: "list",
|
||||
Use: "list [options]",
|
||||
Aliases: []string{"ls"},
|
||||
Args: validate.NoArgs,
|
||||
Short: "List destination for the Podman service(s)",
|
||||
Long: `List destination information for the Podman service(s) in podman configuration`,
|
||||
Example: `podman system connection list
|
||||
podman system connection ls`,
|
||||
podman system connection ls
|
||||
podman system connection ls --format=json`,
|
||||
ValidArgsFunction: completion.AutocompleteNone,
|
||||
RunE: list,
|
||||
TraverseChildren: false,
|
||||
@ -32,6 +35,9 @@ func init() {
|
||||
Command: listCmd,
|
||||
Parent: system.ConnectionCmd,
|
||||
})
|
||||
|
||||
listCmd.Flags().String("format", "", "Custom Go template for printing connections")
|
||||
_ = listCmd.RegisterFlagCompletionFunc("format", common.AutocompleteFormat(namedDestination{}))
|
||||
}
|
||||
|
||||
type namedDestination struct {
|
||||
@ -39,7 +45,7 @@ type namedDestination struct {
|
||||
config.Destination
|
||||
}
|
||||
|
||||
func list(_ *cobra.Command, _ []string) error {
|
||||
func list(cmd *cobra.Command, _ []string) error {
|
||||
cfg, err := config.ReadCustomConfig()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -71,8 +77,22 @@ func list(_ *cobra.Command, _ []string) error {
|
||||
rows = append(rows, r)
|
||||
}
|
||||
|
||||
// TODO: Allow user to override format
|
||||
format := "{{range . }}{{.Name}}\t{{.Identity}}\t{{.URI}}\n{{end -}}"
|
||||
format := "{{.Name}}\t{{.Identity}}\t{{.URI}}\n"
|
||||
switch {
|
||||
case report.IsJSON(cmd.Flag("format").Value.String()):
|
||||
buf, err := registry.JSONLibrary().MarshalIndent(rows, "", " ")
|
||||
if err == nil {
|
||||
fmt.Println(string(buf))
|
||||
}
|
||||
return err
|
||||
default:
|
||||
if cmd.Flag("format").Changed {
|
||||
format = cmd.Flag("format").Value.String()
|
||||
format = report.NormalizeFormat(format)
|
||||
}
|
||||
}
|
||||
format = report.EnforceRange(format)
|
||||
|
||||
tmpl, err := report.NewTemplate("list").Parse(format)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -84,6 +104,9 @@ func list(_ *cobra.Command, _ []string) error {
|
||||
}
|
||||
defer w.Flush()
|
||||
|
||||
_ = tmpl.Execute(w, hdrs)
|
||||
isTable := report.HasTable(cmd.Flag("format").Value.String())
|
||||
if !cmd.Flag("format").Changed || isTable {
|
||||
_ = tmpl.Execute(w, hdrs)
|
||||
}
|
||||
return tmpl.Execute(w, rows)
|
||||
}
|
||||
|
@ -4,13 +4,28 @@
|
||||
podman\-system\-connection\-list - List the destination for the Podman service(s)
|
||||
|
||||
## SYNOPSIS
|
||||
**podman system connection list**
|
||||
**podman system connection list** [*options*]
|
||||
|
||||
**podman system connection ls**
|
||||
**podman system connection ls** [*options*]
|
||||
|
||||
## DESCRIPTION
|
||||
List ssh destination(s) for podman service(s).
|
||||
|
||||
## OPTIONS
|
||||
|
||||
#### **--format**=*format*
|
||||
|
||||
Change the default output format. This can be of a supported type like 'json' or a Go template.
|
||||
Valid placeholders for the Go template listed below:
|
||||
|
||||
| **Placeholder** | **Description** |
|
||||
| --------------- | ----------------------------------------------------------------------------- |
|
||||
| *.Name* | Connection Name/Identifier |
|
||||
| *.Identity* | Path to file containing SSH identity |
|
||||
| *.URI* | URI to podman service. Valid schemes are ssh://[user@]*host*[:port]*Unix domain socket*[?secure=True], unix://*Unix domain socket*, and tcp://localhost[:*port*] |
|
||||
|
||||
An asterisk is appended to the default connection.
|
||||
|
||||
## EXAMPLE
|
||||
```
|
||||
$ podman system connection list
|
||||
|
@ -147,6 +147,12 @@ var _ = Describe("podman system connection", func() {
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.Out).Should(Say("Name *Identity *URI"))
|
||||
|
||||
cmd = []string{"system", "connection", "list", "--format", "{{.Name}}"}
|
||||
session = podmanTest.Podman(cmd)
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session).Should(Exit(0))
|
||||
Expect(session.OutputToString()).Should(Equal("devl* qe"))
|
||||
})
|
||||
|
||||
It("failed default", func() {
|
||||
|
Reference in New Issue
Block a user