github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/flagparser/restart.go (about) 1 package flagparser 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/docker/swarmkit/api" 8 gogotypes "github.com/gogo/protobuf/types" 9 "github.com/spf13/pflag" 10 ) 11 12 func parseRestart(flags *pflag.FlagSet, spec *api.ServiceSpec) error { 13 if spec.Task.Restart == nil { 14 // set new service's restart policy as RestartOnAny 15 spec.Task.Restart = &api.RestartPolicy{ 16 Condition: api.RestartOnAny, 17 } 18 } 19 20 if flags.Changed("restart-condition") { 21 condition, err := flags.GetString("restart-condition") 22 if err != nil { 23 return err 24 } 25 26 switch condition { 27 case "none": 28 spec.Task.Restart.Condition = api.RestartOnNone 29 case "failure": 30 spec.Task.Restart.Condition = api.RestartOnFailure 31 case "any": 32 spec.Task.Restart.Condition = api.RestartOnAny 33 default: 34 return fmt.Errorf("invalid restart condition: %s", condition) 35 } 36 } 37 38 if flags.Changed("restart-delay") { 39 delay, err := flags.GetString("restart-delay") 40 if err != nil { 41 return err 42 } 43 44 delayDuration, err := time.ParseDuration(delay) 45 if err != nil { 46 return err 47 } 48 49 spec.Task.Restart.Delay = gogotypes.DurationProto(delayDuration) 50 } 51 52 if flags.Changed("restart-max-attempts") { 53 attempts, err := flags.GetUint64("restart-max-attempts") 54 if err != nil { 55 return err 56 } 57 58 spec.Task.Restart.MaxAttempts = attempts 59 } 60 61 if flags.Changed("restart-window") { 62 window, err := flags.GetString("restart-window") 63 if err != nil { 64 return err 65 } 66 67 windowDelay, err := time.ParseDuration(window) 68 if err != nil { 69 return err 70 } 71 72 spec.Task.Restart.Window = gogotypes.DurationProto(windowDelay) 73 } 74 75 return nil 76 }