diff options
-rw-r--r-- | cmd/podmanV2/system/info.go | 74 | ||||
-rw-r--r-- | pkg/bindings/system/info.go | 8 | ||||
-rw-r--r-- | pkg/domain/entities/engine_container.go | 2 | ||||
-rw-r--r-- | pkg/domain/infra/abi/system.go | 13 | ||||
-rw-r--r-- | pkg/domain/infra/tunnel/system.go | 11 |
5 files changed, 104 insertions, 4 deletions
diff --git a/cmd/podmanV2/system/info.go b/cmd/podmanV2/system/info.go new file mode 100644 index 000000000..69b2871b7 --- /dev/null +++ b/cmd/podmanV2/system/info.go @@ -0,0 +1,74 @@ +package system + +import ( + "encoding/json" + "fmt" + "os" + "text/template" + + "github.com/containers/libpod/cmd/podmanV2/registry" + "github.com/containers/libpod/pkg/domain/entities" + "github.com/spf13/cobra" + "gopkg.in/yaml.v2" +) + +var ( + infoDescription = `Display information pertaining to the host, current storage stats, and build of podman. + + Useful for the user and when reporting issues. +` + infoCommand = &cobra.Command{ + Use: "info", + Args: cobra.NoArgs, + Long: infoDescription, + Short: "Display podman system information", + PreRunE: preRunE, + RunE: info, + Example: `podman info`, + } +) + +var ( + inFormat string + debug bool +) + +func init() { + registry.Commands = append(registry.Commands, registry.CliCommand{ + Mode: []entities.EngineMode{entities.ABIMode, entities.TunnelMode}, + Command: infoCommand, + }) + flags := infoCommand.Flags() + flags.BoolVarP(&debug, "debug", "D", false, "Display additional debug information") + flags.StringVarP(&inFormat, "format", "f", "", "Change the output format to JSON or a Go template") +} + +func info(cmd *cobra.Command, args []string) error { + info, err := registry.ContainerEngine().Info(registry.GetContext()) + if err != nil { + return err + } + + if inFormat == "json" { + b, err := json.MarshalIndent(info, "", " ") + if err != nil { + return err + } + fmt.Println(string(b)) + return nil + } + if !cmd.Flag("format").Changed { + b, err := yaml.Marshal(info) + if err != nil { + return err + } + fmt.Println(string(b)) + return nil + } + tmpl, err := template.New("info").Parse(inFormat) + if err != nil { + return err + } + err = tmpl.Execute(os.Stdout, info) + return err +} diff --git a/pkg/bindings/system/info.go b/pkg/bindings/system/info.go index f8269cfd8..13e12645d 100644 --- a/pkg/bindings/system/info.go +++ b/pkg/bindings/system/info.go @@ -9,15 +9,15 @@ import ( ) // Info returns information about the libpod environment and its stores -func Info(ctx context.Context) (define.Info, error) { +func Info(ctx context.Context) (*define.Info, error) { info := define.Info{} conn, err := bindings.GetClient(ctx) if err != nil { - return info, err + return nil, err } response, err := conn.DoRequest(nil, http.MethodGet, "/info", nil) if err != nil { - return info, err + return nil, err } - return info, response.Process(&info) + return &info, response.Process(&info) } diff --git a/pkg/domain/entities/engine_container.go b/pkg/domain/entities/engine_container.go index 576ce1658..0fc390ea2 100644 --- a/pkg/domain/entities/engine_container.go +++ b/pkg/domain/entities/engine_container.go @@ -48,4 +48,6 @@ type ContainerEngine interface { VolumeList(ctx context.Context, opts VolumeListOptions) ([]*VolumeListReport, error) VolumePrune(ctx context.Context, opts VolumePruneOptions) ([]*VolumePruneReport, error) VolumeRm(ctx context.Context, namesOrIds []string, opts VolumeRmOptions) ([]*VolumeRmReport, error) + + Info(ctx context.Context) (*define.Info, error) } diff --git a/pkg/domain/infra/abi/system.go b/pkg/domain/infra/abi/system.go new file mode 100644 index 000000000..8aaa69847 --- /dev/null +++ b/pkg/domain/infra/abi/system.go @@ -0,0 +1,13 @@ +// +build ABISupport + +package abi + +import ( + "context" + + "github.com/containers/libpod/libpod/define" +) + +func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) { + return ic.Libpod.Info() +} diff --git a/pkg/domain/infra/tunnel/system.go b/pkg/domain/infra/tunnel/system.go index 5bafef1fe..5d6346234 100644 --- a/pkg/domain/infra/tunnel/system.go +++ b/pkg/domain/infra/tunnel/system.go @@ -1 +1,12 @@ package tunnel + +import ( + "context" + + "github.com/containers/libpod/libpod/define" + "github.com/containers/libpod/pkg/bindings/system" +) + +func (ic *ContainerEngine) Info(ctx context.Context) (*define.Info, error) { + return system.Info(ic.ClientCxt) +} |