github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/cmd/podman/pod_stop.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "github.com/containers/libpod/cmd/podman/cliconfig" 7 "github.com/containers/libpod/pkg/adapter" 8 "github.com/pkg/errors" 9 "github.com/sirupsen/logrus" 10 "github.com/spf13/cobra" 11 ) 12 13 var ( 14 podStopCommand cliconfig.PodStopValues 15 podStopDescription = `The pod name or ID can be used. 16 17 This command will stop all running containers in each of the specified pods.` 18 19 _podStopCommand = &cobra.Command{ 20 Use: "stop [flags] POD [POD...]", 21 Short: "Stop one or more pods", 22 Long: podStopDescription, 23 RunE: func(cmd *cobra.Command, args []string) error { 24 podStopCommand.InputArgs = args 25 podStopCommand.GlobalFlags = MainGlobalOpts 26 podStopCommand.Remote = remoteclient 27 return podStopCmd(&podStopCommand) 28 }, 29 Args: func(cmd *cobra.Command, args []string) error { 30 return checkAllLatestAndCIDFile(cmd, args, false, false) 31 }, 32 Example: `podman pod stop mywebserverpod 33 podman pod stop --latest 34 podman pod stop --time 0 490eb 3557fb`, 35 } 36 ) 37 38 func init() { 39 podStopCommand.Command = _podStopCommand 40 podStopCommand.SetHelpTemplate(HelpTemplate()) 41 podStopCommand.SetUsageTemplate(UsageTemplate()) 42 flags := podStopCommand.Flags() 43 flags.BoolVarP(&podStopCommand.All, "all", "a", false, "Stop all running pods") 44 flags.BoolVarP(&podStopCommand.Ignore, "ignore", "i", false, "Ignore errors when a specified pod is missing") 45 flags.BoolVarP(&podStopCommand.Latest, "latest", "l", false, "Stop the latest pod podman is aware of") 46 flags.UintVarP(&podStopCommand.Timeout, "time", "t", defaultContainerConfig.Engine.StopTimeout, "Seconds to wait for pod stop before killing the container") 47 flags.SetNormalizeFunc(aliasFlags) 48 markFlagHiddenForRemoteClient("ignore", flags) 49 markFlagHiddenForRemoteClient("latest", flags) 50 } 51 52 func podStopCmd(c *cliconfig.PodStopValues) error { 53 runtime, err := adapter.GetRuntime(getContext(), &c.PodmanCommand) 54 if err != nil { 55 return errors.Wrapf(err, "could not get runtime") 56 } 57 defer runtime.DeferredShutdown(false) 58 59 podStopIds, podStopErrors := runtime.StopPods(getContext(), c) 60 for _, p := range podStopIds { 61 fmt.Println(p) 62 } 63 if len(podStopErrors) == 0 { 64 return nil 65 } 66 // Grab the last error 67 lastError := podStopErrors[len(podStopErrors)-1] 68 // Remove the last error from the error slice 69 podStopErrors = podStopErrors[:len(podStopErrors)-1] 70 71 for _, err := range podStopErrors { 72 logrus.Errorf("%q", err) 73 } 74 return lastError 75 }