github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/flagparser/update.go (about) 1 package flagparser 2 3 import ( 4 "errors" 5 "time" 6 7 "github.com/docker/swarmkit/api" 8 "github.com/spf13/pflag" 9 ) 10 11 func parseUpdate(flags *pflag.FlagSet, spec *api.ServiceSpec) error { 12 if flags.Changed("update-parallelism") { 13 parallelism, err := flags.GetUint64("update-parallelism") 14 if err != nil { 15 return err 16 } 17 if spec.Update == nil { 18 spec.Update = &api.UpdateConfig{} 19 } 20 spec.Update.Parallelism = parallelism 21 } 22 23 if flags.Changed("update-delay") { 24 delay, err := flags.GetString("update-delay") 25 if err != nil { 26 return err 27 } 28 29 delayDuration, err := time.ParseDuration(delay) 30 if err != nil { 31 return err 32 } 33 34 if spec.Update == nil { 35 spec.Update = &api.UpdateConfig{} 36 } 37 spec.Update.Delay = delayDuration 38 } 39 40 if flags.Changed("update-on-failure") { 41 if spec.Update == nil { 42 spec.Update = &api.UpdateConfig{} 43 } 44 45 action, err := flags.GetString("update-on-failure") 46 if err != nil { 47 return err 48 } 49 switch action { 50 case "pause": 51 spec.Update.FailureAction = api.UpdateConfig_PAUSE 52 case "continue": 53 spec.Update.FailureAction = api.UpdateConfig_CONTINUE 54 case "rollback": 55 spec.Update.FailureAction = api.UpdateConfig_ROLLBACK 56 default: 57 return errors.New("--update-on-failure value must be pause or continue") 58 } 59 } 60 61 if flags.Changed("update-order") { 62 if spec.Update == nil { 63 spec.Update = &api.UpdateConfig{} 64 } 65 66 order, err := flags.GetString("update-order") 67 if err != nil { 68 return err 69 } 70 71 switch order { 72 case "stop-first": 73 spec.Update.Order = api.UpdateConfig_STOP_FIRST 74 case "start-first": 75 spec.Update.Order = api.UpdateConfig_START_FIRST 76 default: 77 return errors.New("--update-order value must be stop-first or start-first") 78 } 79 } 80 81 if flags.Changed("rollback-parallelism") { 82 parallelism, err := flags.GetUint64("rollback-parallelism") 83 if err != nil { 84 return err 85 } 86 if spec.Rollback == nil { 87 spec.Rollback = &api.UpdateConfig{} 88 } 89 spec.Rollback.Parallelism = parallelism 90 } 91 92 if flags.Changed("rollback-delay") { 93 delay, err := flags.GetString("rollback-delay") 94 if err != nil { 95 return err 96 } 97 98 delayDuration, err := time.ParseDuration(delay) 99 if err != nil { 100 return err 101 } 102 103 if spec.Rollback == nil { 104 spec.Rollback = &api.UpdateConfig{} 105 } 106 spec.Rollback.Delay = delayDuration 107 } 108 109 if flags.Changed("rollback-on-failure") { 110 if spec.Rollback == nil { 111 spec.Rollback = &api.UpdateConfig{} 112 } 113 114 action, err := flags.GetString("rollback-on-failure") 115 if err != nil { 116 return err 117 } 118 switch action { 119 case "pause": 120 spec.Rollback.FailureAction = api.UpdateConfig_PAUSE 121 case "continue": 122 spec.Rollback.FailureAction = api.UpdateConfig_CONTINUE 123 default: 124 return errors.New("--rollback-on-failure value must be pause or continue") 125 } 126 } 127 128 if flags.Changed("rollback-order") { 129 if spec.Rollback == nil { 130 spec.Rollback = &api.UpdateConfig{} 131 } 132 133 order, err := flags.GetString("rollback-order") 134 if err != nil { 135 return err 136 } 137 138 switch order { 139 case "stop-first": 140 spec.Rollback.Order = api.UpdateConfig_STOP_FIRST 141 case "start-first": 142 spec.Rollback.Order = api.UpdateConfig_START_FIRST 143 default: 144 return errors.New("--rollback-order value must be stop-first or start-first") 145 } 146 } 147 148 return nil 149 }