mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-10-13 01:17:39 +00:00
BuildOrigin is a field that can be set at build time by packagers. This helps us trace how and where the binary was built and installed from, allowing us to see if the issue is due to a specfic installation or a general podman bug. This field shows up in podman version and in podman info when populated. Note that podman info has a new field, Client, that only appears when running podman info using the remote client. Automatically set the BuildOrigin field when building the macOS pkginstaller to pkginstaller. Usage: make podman-remote BUILD_ORIGIN="mypackaging" Signed-off-by: Ashley Cui <acui@redhat.com>
120 lines
3 KiB
Go
120 lines
3 KiB
Go
package system
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/containers/common/pkg/completion"
|
|
"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/containers/podman/v5/libpod/define"
|
|
"github.com/spf13/cobra"
|
|
"sigs.k8s.io/yaml"
|
|
)
|
|
|
|
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 [options]",
|
|
Args: validate.NoArgs,
|
|
Long: infoDescription,
|
|
Short: "Display podman system information",
|
|
RunE: info,
|
|
ValidArgsFunction: completion.AutocompleteNone,
|
|
Example: `podman info`,
|
|
}
|
|
|
|
systemInfoCommand = &cobra.Command{
|
|
Args: infoCommand.Args,
|
|
Use: infoCommand.Use,
|
|
Short: infoCommand.Short,
|
|
Long: infoCommand.Long,
|
|
RunE: infoCommand.RunE,
|
|
ValidArgsFunction: infoCommand.ValidArgsFunction,
|
|
Example: `podman system info`,
|
|
}
|
|
)
|
|
|
|
var (
|
|
inFormat string
|
|
debug bool
|
|
)
|
|
|
|
type infoReport struct {
|
|
define.Info
|
|
Client *define.Version `json:",omitempty" yaml:",omitempty"`
|
|
}
|
|
|
|
func init() {
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: infoCommand,
|
|
})
|
|
infoFlags(infoCommand)
|
|
|
|
registry.Commands = append(registry.Commands, registry.CliCommand{
|
|
Command: systemInfoCommand,
|
|
Parent: systemCmd,
|
|
})
|
|
infoFlags(systemInfoCommand)
|
|
}
|
|
|
|
func infoFlags(cmd *cobra.Command) {
|
|
flags := cmd.Flags()
|
|
|
|
flags.BoolVarP(&debug, "debug", "D", false, "Display additional debug information")
|
|
_ = flags.MarkHidden("debug") // It's a NOP since Podman version 2.0
|
|
|
|
formatFlagName := "format"
|
|
flags.StringVarP(&inFormat, formatFlagName, "f", "", "Change the output format to JSON or a Go template")
|
|
_ = cmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&define.Info{}))
|
|
}
|
|
|
|
func info(cmd *cobra.Command, args []string) error {
|
|
info, err := registry.ContainerEngine().Info(registry.GetContext())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
remote := registry.IsRemote()
|
|
info.Host.ServiceIsRemote = remote
|
|
|
|
infoReport := infoReport{
|
|
Info: *info,
|
|
}
|
|
|
|
if remote {
|
|
clientVers, _ := define.GetVersion()
|
|
infoReport.Client = &clientVers
|
|
}
|
|
|
|
switch {
|
|
case report.IsJSON(inFormat):
|
|
b, err := json.MarshalIndent(infoReport, "", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(string(b))
|
|
case cmd.Flags().Changed("format"):
|
|
rpt := report.New(os.Stdout, cmd.Name())
|
|
defer rpt.Flush()
|
|
|
|
// Use OriginUnknown so it does not add an extra range since it
|
|
// will only be called for a single element and not a slice.
|
|
rpt, err = rpt.Parse(report.OriginUnknown, inFormat)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return rpt.Execute(infoReport)
|
|
default:
|
|
b, err := yaml.Marshal(infoReport)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(string(b))
|
|
}
|
|
return nil
|
|
}
|