github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/restart.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/containers/libpod/cmd/podman/cliconfig" 7 "github.com/containers/libpod/libpod/define" 8 "github.com/containers/libpod/pkg/adapter" 9 "github.com/pkg/errors" 10 "github.com/spf13/cobra" 11 ) 12 13 var ( 14 restartCommand cliconfig.RestartValues 15 restartDescription = fmt.Sprintf(`Restarts one or more running containers. The container ID or name can be used. 16 17 A timeout before forcibly stopping can be set, but defaults to %d seconds.`, defaultContainerConfig.Engine.StopTimeout) 18 _restartCommand = &cobra.Command{ 19 Use: "restart [flags] CONTAINER [CONTAINER...]", 20 Short: "Restart one or more containers", 21 Long: restartDescription, 22 RunE: func(cmd *cobra.Command, args []string) error { 23 restartCommand.InputArgs = args 24 restartCommand.GlobalFlags = MainGlobalOpts 25 return restartCmd(&restartCommand) 26 }, 27 Args: func(cmd *cobra.Command, args []string) error { 28 return checkAllLatestAndCIDFile(cmd, args, false, false) 29 }, 30 Example: `podman restart ctrID 31 podman restart --latest 32 podman restart ctrID1 ctrID2`, 33 } 34 ) 35 36 func init() { 37 restartCommand.Command = _restartCommand 38 restartCommand.SetHelpTemplate(HelpTemplate()) 39 restartCommand.SetUsageTemplate(UsageTemplate()) 40 flags := restartCommand.Flags() 41 flags.BoolVarP(&restartCommand.All, "all", "a", false, "Restart all non-running containers") 42 flags.BoolVarP(&restartCommand.Latest, "latest", "l", false, "Act on the latest container podman is aware of") 43 flags.BoolVar(&restartCommand.Running, "running", false, "Restart only running containers when --all is used") 44 flags.UintVarP(&restartCommand.Timeout, "time", "t", defaultContainerConfig.Engine.StopTimeout, "Seconds to wait for stop before killing the container") 45 46 markFlagHiddenForRemoteClient("latest", flags) 47 flags.SetNormalizeFunc(aliasFlags) 48 } 49 50 func restartCmd(c *cliconfig.RestartValues) error { 51 all := c.All 52 if len(c.InputArgs) < 1 && !c.Latest && !all { 53 return errors.Wrapf(define.ErrInvalidArg, "you must provide at least one container name or ID") 54 } 55 56 runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand) 57 if err != nil { 58 return errors.Wrapf(err, "error creating libpod runtime") 59 } 60 defer runtime.DeferredShutdown(false) 61 62 ok, failures, err := runtime.Restart(getContext(), c) 63 if err != nil { 64 if errors.Cause(err) == define.ErrNoSuchCtr { 65 if len(c.InputArgs) > 1 { 66 exitCode = define.ExecErrorCodeGeneric 67 } else { 68 exitCode = 1 69 } 70 } 71 return err 72 } 73 if len(failures) > 0 { 74 exitCode = define.ExecErrorCodeGeneric 75 } 76 return printCmdResults(ok, failures) 77 }