summaryrefslogtreecommitdiff
path: root/cmd/podman/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/podman/main.go')
-rw-r--r--cmd/podman/main.go198
1 files changed, 29 insertions, 169 deletions
diff --git a/cmd/podman/main.go b/cmd/podman/main.go
index 4435b036e..5f7bfe3c9 100644
--- a/cmd/podman/main.go
+++ b/cmd/podman/main.go
@@ -1,190 +1,50 @@
package main
import (
- "context"
- "io"
"os"
- "path"
- "github.com/containers/common/pkg/config"
- "github.com/containers/libpod/cmd/podman/cliconfig"
- "github.com/containers/libpod/libpod"
- "github.com/containers/libpod/libpod/define"
- _ "github.com/containers/libpod/pkg/hooks/0.1.0"
- "github.com/containers/libpod/pkg/rootless"
- "github.com/containers/libpod/version"
+ _ "github.com/containers/libpod/cmd/podman/containers"
+ _ "github.com/containers/libpod/cmd/podman/healthcheck"
+ _ "github.com/containers/libpod/cmd/podman/images"
+ _ "github.com/containers/libpod/cmd/podman/networks"
+ _ "github.com/containers/libpod/cmd/podman/pods"
+ "github.com/containers/libpod/cmd/podman/registry"
+ _ "github.com/containers/libpod/cmd/podman/system"
+ _ "github.com/containers/libpod/cmd/podman/volumes"
"github.com/containers/storage/pkg/reexec"
- "github.com/opentracing/opentracing-go"
- "github.com/sirupsen/logrus"
- "github.com/spf13/cobra"
)
-// This is populated by the Makefile from the VERSION file
-// in the repository
-var (
- exitCode = define.ExecErrorCodeGeneric
- Ctx context.Context
- span opentracing.Span // nolint:varcheck,deadcode,unused
- closer io.Closer // nolint:varcheck,deadcode,unused
-)
-
-// Commands that the remote and local client have
-// implemented.
-var mainCommands = []*cobra.Command{
- _attachCommand,
- _buildCommand,
- _commitCommand,
- _diffCommand,
- _createCommand,
- _eventsCommand,
- _execCommand,
- _exportCommand,
- _generateCommand,
- _historyCommand,
- &_imagesCommand,
- _importCommand,
- _infoCommand,
- _initCommand,
- &_inspectCommand,
- _killCommand,
- _loadCommand,
- _logsCommand,
- _pauseCommand,
- podCommand.Command,
- _portCommand,
- &_psCommand,
- _pullCommand,
- _pushCommand,
- _restartCommand,
- _rmCommand,
- &_rmiCommand,
- _runCommand,
- _saveCommand,
- _stopCommand,
- _tagCommand,
- _topCommand,
- _unpauseCommand,
- _versionCommand,
- _waitCommand,
- imageCommand.Command,
- _startCommand,
- systemCommand.Command,
- _untagCommand,
-}
-
-var rootCmd = &cobra.Command{
- Use: path.Base(os.Args[0]),
- Long: "manage pods and images",
- RunE: commandRunE(),
- PersistentPreRunE: before,
- PersistentPostRunE: after,
- SilenceUsage: true,
- SilenceErrors: true,
-}
-
-var (
- MainGlobalOpts cliconfig.MainFlags
- defaultContainerConfig = getDefaultContainerConfig()
-)
-
-func initCobra() {
- cobra.OnInitialize(initConfig)
- rootCmd.TraverseChildren = true
- rootCmd.Version = version.Version
- // Override default --help information of `--version` global flag
- var dummyVersion bool
- rootCmd.Flags().BoolVarP(&dummyVersion, "version", "v", false, "Version of podman")
- rootCmd.AddCommand(mainCommands...)
- rootCmd.AddCommand(getMainCommands()...)
-}
-
func init() {
- if err := libpod.SetXdgDirs(); err != nil {
- logrus.Errorf(err.Error())
- os.Exit(1)
- }
- initBuild()
- initCobra()
-}
-
-func initConfig() {
- // we can do more stuff in here.
-}
-
-func before(cmd *cobra.Command, args []string) error {
- // Set log level; if not log-level is provided, default to error
- logLevel := MainGlobalOpts.LogLevel
- if logLevel == "" {
- logLevel = "error"
- }
- level, err := logrus.ParseLevel(logLevel)
- if err != nil {
- return err
- }
- logrus.SetLevel(level)
- if err := setSyslog(); err != nil {
- return err
- }
-
- if err := setupRootless(cmd, args); err != nil {
- return err
- }
-
- // check that global opts input is valid
- if err := checkInput(); err != nil {
- return err
- }
-
- if err := setRLimits(); err != nil {
- return err
- }
- if rootless.IsRootless() {
- logrus.Info("running as rootless")
- }
- setUMask()
-
- return profileOn(cmd)
-}
-
-func after(cmd *cobra.Command, args []string) error {
- return profileOff(cmd)
+ // This is the bootstrap configuration, if user gives
+ // CLI flags parts of this configuration may be overwritten
+ registry.PodmanOptions = registry.NewPodmanConfig()
}
func main() {
- //debug := false
- //cpuProfile := false
-
if reexec.Init() {
// We were invoked with a different argv[0] indicating that we
// had a specific job to do as a subprocess, and it's done.
return
}
- // Hard code TMPDIR functions to use /var/tmp, if user did not override
- if _, ok := os.LookupEnv("TMPDIR"); !ok {
- os.Setenv("TMPDIR", "/var/tmp")
- }
- if err := rootCmd.Execute(); err != nil {
- outputError(err)
- } else if exitCode == define.ExecErrorCodeGeneric {
- // The exitCode modified from define.ExecErrorCodeGeneric,
- // indicates an application
- // running inside of a container failed, as opposed to the
- // podman command failed. Must exit with that exit code
- // otherwise command exited correctly.
- exitCode = 0
- }
- // Check if /etc/containers/registries.conf exists when running in
- // in a local environment.
- CheckForRegistries()
- os.Exit(exitCode)
-}
+ for _, c := range registry.Commands {
+ for _, m := range c.Mode {
+ if registry.PodmanOptions.EngineMode == m {
+ parent := rootCmd
+ if c.Parent != nil {
+ parent = c.Parent
+ }
+ parent.AddCommand(c.Command)
-func getDefaultContainerConfig() *config.Config {
- defaultContainerConfig, err := config.Default()
- if err != nil {
- logrus.Error(err)
- os.Exit(1)
+ // - templates need to be set here, as PersistentPreRunE() is
+ // not called when --help is used.
+ // - rootCmd uses cobra default template not ours
+ c.Command.SetHelpTemplate(helpTemplate)
+ c.Command.SetUsageTemplate(usageTemplate)
+ }
+ }
}
- return defaultContainerConfig
+
+ Execute()
+ os.Exit(0)
}