automation-tests/cmd/podman/farm/list.go

102 lines
2.4 KiB
Go

package farm
import (
"fmt"
"os"
"sort"
"github.com/containers/common/pkg/completion"
"github.com/containers/common/pkg/config"
"github.com/containers/common/pkg/report"
"github.com/containers/podman/v5/cmd/podman/common"
"github.com/containers/podman/v5/cmd/podman/registry"
"github.com/containers/podman/v5/cmd/podman/validate"
"github.com/spf13/cobra"
)
var (
farmLsDescription = `podman farm ls
List all available farms. The output of the farms can be filtered
and the output format can be changed to JSON or a user specified Go template.`
lsCommand = &cobra.Command{
Use: "list [options]",
Aliases: []string{"ls"},
Args: validate.NoArgs,
Short: "List all existing farms",
Long: farmLsDescription,
PersistentPreRunE: validate.NoOp,
RunE: list,
PersistentPostRunE: validate.NoOp,
ValidArgsFunction: completion.AutocompleteNone,
}
// Temporary struct to hold cli values.
lsOpts = struct {
Format string
}{}
)
func init() {
registry.Commands = append(registry.Commands, registry.CliCommand{
Command: lsCommand,
Parent: farmCmd,
})
flags := lsCommand.Flags()
formatFlagName := "format"
flags.StringVar(&lsOpts.Format, formatFlagName, "", "Format farm output using Go template")
_ = lsCommand.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&config.Farm{}))
}
func list(cmd *cobra.Command, args []string) error {
format := lsOpts.Format
if format == "" && len(args) > 0 {
format = "json"
}
farms, err := registry.PodmanConfig().ContainersConfDefaultsRO.GetAllFarms()
if err != nil {
return err
}
sort.Slice(farms, func(i, j int) bool {
return farms[i].Name < farms[j].Name
})
rpt := report.New(os.Stdout, cmd.Name())
defer rpt.Flush()
if report.IsJSON(format) {
buf, err := registry.JSONLibrary().MarshalIndent(farms, "", " ")
if err == nil {
fmt.Println(string(buf))
}
return err
}
if format != "" {
rpt, err = rpt.Parse(report.OriginUser, format)
} else {
rpt, err = rpt.Parse(report.OriginPodman,
"{{range .}}{{.Name}}\t{{.Connections}}\t{{.Default}}\t{{.ReadWrite}}\n{{end -}}")
}
if err != nil {
return err
}
if rpt.RenderHeaders {
err = rpt.Execute([]map[string]string{{
"Default": "Default",
"Connections": "Connections",
"Name": "Name",
"ReadWrite": "ReadWrite",
}})
if err != nil {
return err
}
}
return rpt.Execute(farms)
}