We should not be exiting with exit(1)
There is cleanup code that will never get run.
This code will print out all errors and then return the last error.
This should allow for proper cleanup.
Also cleanup help to switch usage and description.
@@ -6,7 +6,6 @@ import (
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/urfave/cli"
- "os"
)
var (
@@ -18,15 +17,21 @@ var (
Value: defaultTimeout,
},
}
- stopDescription = "Stop one or more containers"
+ stopDescription = `
+ kpod stop
+
+ Stops one or more running containers. The container name or ID can be used.
+ A timeout to forcibly stop the container can also be set but defaults to 10
+ seconds otherwise.
+`
+
stopCommand = cli.Command{
Name: "stop",
- Usage: "Stops one or more running containers. The container name or ID can be used. A timeout to forcibly" +
- " stop the container can also be set but defaults to 10 seconds otherwise.",
+ Usage: "Stop one or more containers",
Description: stopDescription,
Flags: stopFlags,
Action: stopCmd,
- ArgsUsage: "CONTAINER-NAME",
+ ArgsUsage: "CONTAINER-NAME [CONTAINER-NAME ...]",
}
)
@@ -50,19 +55,18 @@ func stopCmd(c *cli.Context) error {
if err != nil {
return errors.Wrapf(err, "could not update list of containers")
}
- hadError := false
+ var lastError error
for _, container := range c.Args() {
cid, err := server.ContainerStop(container, stopTimeout)
if err != nil {
- hadError = true
- logrus.Error(err)
+ if lastError != nil {
+ logrus.Error(lastError)
+ }
+ lastError = errors.Wrapf(err, "failed to stop %v", container)
} else {
fmt.Println(cid)
}
}
- if hadError {
- os.Exit(1)
- }
- return nil
+ return lastError
}
