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  }