102 lines
2.4 KiB
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)
|
|
}
|