Merge pull request #2476 from mheon/fix_stop

Fix ignored --stop-timeout flag to 'podman create'
This commit is contained in:
OpenShift Merge Robot
2019-02-28 03:54:53 +01:00
committed by GitHub
5 changed files with 78 additions and 32 deletions

View File

@ -1,5 +1,7 @@
package cliconfig package cliconfig
import "github.com/sirupsen/logrus"
// GlobalIsSet is a compatibility method for urfave // GlobalIsSet is a compatibility method for urfave
func (p *PodmanCommand) GlobalIsSet(opt string) bool { func (p *PodmanCommand) GlobalIsSet(opt string) bool {
flag := p.PersistentFlags().Lookup(opt) flag := p.PersistentFlags().Lookup(opt)
@ -22,9 +24,13 @@ func (p *PodmanCommand) IsSet(opt string) bool {
func (p *PodmanCommand) Bool(opt string) bool { func (p *PodmanCommand) Bool(opt string) bool {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return false return false
} }
val, _ := p.Flags().GetBool(opt) val, err := p.Flags().GetBool(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -32,9 +38,13 @@ func (p *PodmanCommand) Bool(opt string) bool {
func (p *PodmanCommand) String(opt string) string { func (p *PodmanCommand) String(opt string) string {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return "" return ""
} }
val, _ := p.Flags().GetString(opt) val, err := p.Flags().GetString(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -42,9 +52,13 @@ func (p *PodmanCommand) String(opt string) string {
func (p *PodmanCommand) StringArray(opt string) []string { func (p *PodmanCommand) StringArray(opt string) []string {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return []string{} return []string{}
} }
val, _ := p.Flags().GetStringArray(opt) val, err := p.Flags().GetStringArray(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -52,9 +66,13 @@ func (p *PodmanCommand) StringArray(opt string) []string {
func (p *PodmanCommand) StringSlice(opt string) []string { func (p *PodmanCommand) StringSlice(opt string) []string {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return []string{} return []string{}
} }
val, _ := p.Flags().GetStringSlice(opt) val, err := p.Flags().GetStringSlice(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -62,9 +80,13 @@ func (p *PodmanCommand) StringSlice(opt string) []string {
func (p *PodmanCommand) Int(opt string) int { func (p *PodmanCommand) Int(opt string) int {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return 0 return 0
} }
val, _ := p.Flags().GetInt(opt) val, err := p.Flags().GetInt(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -72,9 +94,13 @@ func (p *PodmanCommand) Int(opt string) int {
func (p *PodmanCommand) Uint(opt string) uint { func (p *PodmanCommand) Uint(opt string) uint {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return 0 return 0
} }
val, _ := p.Flags().GetUint(opt) val, err := p.Flags().GetUint(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -82,9 +108,13 @@ func (p *PodmanCommand) Uint(opt string) uint {
func (p *PodmanCommand) Int64(opt string) int64 { func (p *PodmanCommand) Int64(opt string) int64 {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return 0 return 0
} }
val, _ := p.Flags().GetInt64(opt) val, err := p.Flags().GetInt64(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -92,9 +122,13 @@ func (p *PodmanCommand) Int64(opt string) int64 {
func (p *PodmanCommand) Uint64(opt string) uint64 { func (p *PodmanCommand) Uint64(opt string) uint64 {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return 0 return 0
} }
val, _ := p.Flags().GetUint64(opt) val, err := p.Flags().GetUint64(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }
@ -102,8 +136,12 @@ func (p *PodmanCommand) Uint64(opt string) uint64 {
func (p *PodmanCommand) Float64(opt string) float64 { func (p *PodmanCommand) Float64(opt string) float64 {
flag := p.Flags().Lookup(opt) flag := p.Flags().Lookup(opt)
if flag == nil { if flag == nil {
logrus.Errorf("Could not find flag %s", opt)
return 0 return 0
} }
val, _ := p.Flags().GetFloat64(opt) val, err := p.Flags().GetFloat64(opt)
if err != nil {
logrus.Errorf("Error getting flag %s: %v", opt, err)
}
return val return val
} }

View File

@ -415,7 +415,7 @@ func getCreateFlags(c *cliconfig.PodmanCommand) {
"stop-signal", "", "stop-signal", "",
"Signal to stop a container. Default is SIGTERM", "Signal to stop a container. Default is SIGTERM",
) )
createFlags.Int( createFlags.Uint(
"stop-timeout", libpod.CtrRemoveTimeout, "stop-timeout", libpod.CtrRemoveTimeout,
"Timeout (in seconds) to stop a container. Default is 10", "Timeout (in seconds) to stop a container. Default is 10",
) )

View File

@ -408,7 +408,7 @@ func parseCreateOpts(ctx context.Context, c *cliconfig.PodmanCommand, runtime *l
return nil, err return nil, err
} }
if err = parseVolumesFrom(c.StringArray("volumes-from")); err != nil { if err = parseVolumesFrom(c.StringSlice("volumes-from")); err != nil {
return nil, err return nil, err
} }
@ -714,16 +714,16 @@ func parseCreateOpts(ctx context.Context, c *cliconfig.PodmanCommand, runtime *l
Image: imageName, Image: imageName,
ImageID: imageID, ImageID: imageID,
Interactive: c.Bool("interactive"), Interactive: c.Bool("interactive"),
IP6Address: c.String("ipv6"), //IP6Address: c.String("ipv6"), // Not implemented yet - needs CNI support for static v6
IPAddress: c.String("ip"), IPAddress: c.String("ip"),
Labels: labels, Labels: labels,
LinkLocalIP: c.StringSlice("link-local-ip"), //LinkLocalIP: c.StringSlice("link-local-ip"), // Not implemented yet
LogDriver: c.String("log-driver"), LogDriver: c.String("log-driver"),
LogDriverOpt: c.StringSlice("log-opt"), LogDriverOpt: c.StringSlice("log-opt"),
MacAddress: c.String("mac-address"), MacAddress: c.String("mac-address"),
Name: c.String("name"), Name: c.String("name"),
Network: network, Network: network,
NetworkAlias: c.StringSlice("network-alias"), //NetworkAlias: c.StringSlice("network-alias"), // Not implemented - does this make sense in Podman?
IpcMode: ipcMode, IpcMode: ipcMode,
NetMode: netMode, NetMode: netMode,
UtsMode: utsMode, UtsMode: utsMode,

View File

@ -73,7 +73,7 @@ func restartCmd(c *cliconfig.RestartValues) error {
defer runtime.Shutdown(false) defer runtime.Shutdown(false)
timeout := c.Timeout timeout := c.Timeout
useTimeout := c.Flag("timeout").Changed useTimeout := c.Flag("timeout").Changed || c.Flag("time").Changed
// Handle --latest // Handle --latest
if c.Latest { if c.Latest {

View File

@ -73,21 +73,29 @@ func stopCmd(c *cliconfig.StopValues) error {
fmt.Println(err.Error()) fmt.Println(err.Error())
} }
if c.Flag("timeout").Changed && c.Flag("time").Changed {
return errors.New("the --timeout and --time flags are mutually exclusive")
}
var stopFuncs []shared.ParallelWorkerInput var stopFuncs []shared.ParallelWorkerInput
for _, ctr := range containers { for _, ctr := range containers {
con := ctr con := ctr
var stopTimeout uint var stopTimeout uint
if c.Flag("timeout").Changed { if c.Flag("timeout").Changed || c.Flag("time").Changed {
stopTimeout = c.Timeout stopTimeout = c.Timeout
} else { } else {
stopTimeout = ctr.StopTimeout() stopTimeout = ctr.StopTimeout()
logrus.Debugf("Set timeout to container %s default (%d)", ctr.ID(), stopTimeout)
} }
f := func() error { f := func() error {
if err := con.StopWithTimeout(stopTimeout); err != nil && errors.Cause(err) != libpod.ErrCtrStopped { if err := con.StopWithTimeout(stopTimeout); err != nil {
if errors.Cause(err) == libpod.ErrCtrStopped {
logrus.Debugf("Container %s already stopped", con.ID())
return nil
}
return err return err
} }
return nil return nil
} }
stopFuncs = append(stopFuncs, shared.ParallelWorkerInput{ stopFuncs = append(stopFuncs, shared.ParallelWorkerInput{
ContainerID: con.ID(), ContainerID: con.ID(),