mirror of
https://github.com/containers/podman.git
synced 2025-06-25 20:26:51 +08:00
Merge pull request #2476 from mheon/fix_stop
Fix ignored --stop-timeout flag to 'podman create'
This commit is contained in:
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
)
|
)
|
||||||
|
@ -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,
|
||||||
|
@ -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 {
|
||||||
|
@ -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(),
|
||||||
|
Reference in New Issue
Block a user