mirror of https://github.com/containers/podman.git
99 lines
2.7 KiB
Go
99 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
rt "runtime"
|
|
|
|
"github.com/containers/libpod/cmd/podman/cliconfig"
|
|
"github.com/containers/libpod/cmd/podman/formats"
|
|
"github.com/containers/libpod/libpod"
|
|
"github.com/containers/libpod/libpod/adapter"
|
|
"github.com/containers/libpod/version"
|
|
"github.com/pkg/errors"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var (
|
|
infoCommand cliconfig.InfoValues
|
|
|
|
infoDescription = "Display podman system information"
|
|
_infoCommand = &cobra.Command{
|
|
Use: "info",
|
|
Long: infoDescription,
|
|
Short: `Display information pertaining to the host, current storage stats, and build of podman. Useful for the user and when reporting issues.`,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
infoCommand.InputArgs = args
|
|
infoCommand.GlobalFlags = MainGlobalOpts
|
|
return infoCmd(&infoCommand)
|
|
},
|
|
Example: `podman info`,
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
infoCommand.Command = _infoCommand
|
|
infoCommand.SetUsageTemplate(UsageTemplate())
|
|
flags := infoCommand.Flags()
|
|
|
|
flags.BoolVarP(&infoCommand.Debug, "debug", "D", false, "Display additional debug information")
|
|
flags.StringVarP(&infoCommand.Format, "format", "f", "", "Change the output format to JSON or a Go template")
|
|
|
|
}
|
|
|
|
func infoCmd(c *cliconfig.InfoValues) error {
|
|
info := map[string]interface{}{}
|
|
remoteClientInfo := map[string]interface{}{}
|
|
|
|
runtime, err := adapter.GetRuntime(&c.PodmanCommand)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "could not get runtime")
|
|
}
|
|
defer runtime.Shutdown(false)
|
|
|
|
infoArr, err := runtime.Info()
|
|
if err != nil {
|
|
return errors.Wrapf(err, "error getting info")
|
|
}
|
|
if runtime.Remote {
|
|
remoteClientInfo["RemoteAPI Version"] = version.RemoteAPIVersion
|
|
remoteClientInfo["Podman Version"] = version.Version
|
|
remoteClientInfo["OS Arch"] = fmt.Sprintf("%s/%s", rt.GOOS, rt.GOARCH)
|
|
infoArr = append(infoArr, libpod.InfoData{Type: "client", Data: remoteClientInfo})
|
|
}
|
|
|
|
if !runtime.Remote && c.Debug {
|
|
debugInfo := debugInfo(c)
|
|
infoArr = append(infoArr, libpod.InfoData{Type: "debug", Data: debugInfo})
|
|
}
|
|
|
|
for _, currInfo := range infoArr {
|
|
info[currInfo.Type] = currInfo.Data
|
|
}
|
|
|
|
var out formats.Writer
|
|
infoOutputFormat := c.Format
|
|
switch infoOutputFormat {
|
|
case formats.JSONString:
|
|
out = formats.JSONStruct{Output: info}
|
|
case "":
|
|
out = formats.YAMLStruct{Output: info}
|
|
default:
|
|
out = formats.StdoutTemplate{Output: info, Template: infoOutputFormat}
|
|
}
|
|
|
|
formats.Writer(out).Out()
|
|
|
|
return nil
|
|
}
|
|
|
|
// top-level "debug" info
|
|
func debugInfo(c *cliconfig.InfoValues) map[string]interface{} {
|
|
info := map[string]interface{}{}
|
|
info["compiler"] = rt.Compiler
|
|
info["go version"] = rt.Version()
|
|
info["podman version"] = version.Version
|
|
version, _ := libpod.GetVersion()
|
|
info["git commit"] = version.GitCommit
|
|
return info
|
|
}
|