Browse code

Merge pull request #23697 from dongluochen/blockServiceModeChange

Do not allow service mode change

Brian Goff authored on 2016/06/27 23:53:53
Showing 3 changed files
... ...
@@ -24,6 +24,8 @@ func newCreateCommand(dockerCli *client.DockerCli) *cobra.Command {
24 24
 			return runCreate(dockerCli, opts)
25 25
 		},
26 26
 	}
27
+	flags := cmd.Flags()
28
+	flags.StringVar(&opts.mode, flagMode, "replicated", "Service mode (replicated or global)")
27 29
 	addServiceFlags(cmd, opts)
28 30
 	cmd.Flags().SetInterspersed(false)
29 31
 	return cmd
... ...
@@ -454,7 +454,6 @@ func addServiceFlags(cmd *cobra.Command, opts *serviceOptions) {
454 454
 	flags.Var(&opts.resources.resMemBytes, flagReserveMemory, "Reserve Memory")
455 455
 	flags.Var(&opts.stopGrace, flagStopGracePeriod, "Time to wait before force killing a container")
456 456
 
457
-	flags.StringVar(&opts.mode, flagMode, "replicated", "Service mode (replicated or global)")
458 457
 	flags.Var(&opts.replicas, flagReplicas, "Number of tasks")
459 458
 
460 459
 	flags.StringVar(&opts.restartPolicy.condition, flagRestartCondition, "", "Restart when condition is met (none, on_failure, or any)")
... ...
@@ -162,7 +162,7 @@ func updateService(spec *swarm.ServiceSpec, flags *pflag.FlagSet) error {
162 162
 		updateSlice(flagConstraint, &task.Placement.Constraints)
163 163
 	}
164 164
 
165
-	if err := updateMode(flags, &spec.Mode); err != nil {
165
+	if err := updateReplicas(flags, &spec.Mode); err != nil {
166 166
 		return err
167 167
 	}
168 168
 
... ...
@@ -250,40 +250,14 @@ func updateNetworks(flags *pflag.FlagSet, attachments *[]swarm.NetworkAttachment
250 250
 	*attachments = localAttachments
251 251
 }
252 252
 
253
-func updateMode(flags *pflag.FlagSet, serviceMode *swarm.ServiceMode) error {
254
-	if !flags.Changed(flagMode) && !flags.Changed(flagReplicas) {
253
+func updateReplicas(flags *pflag.FlagSet, serviceMode *swarm.ServiceMode) error {
254
+	if !flags.Changed(flagReplicas) {
255 255
 		return nil
256 256
 	}
257 257
 
258
-	var mode string
259
-	if flags.Changed(flagMode) {
260
-		mode, _ = flags.GetString(flagMode)
261
-	}
262
-
263
-	if !(mode == "replicated" || serviceMode.Replicated != nil) && flags.Changed(flagReplicas) {
258
+	if serviceMode.Replicated == nil {
264 259
 		return fmt.Errorf("replicas can only be used with replicated mode")
265 260
 	}
266
-
267
-	if mode == "global" {
268
-		serviceMode.Replicated = nil
269
-		serviceMode.Global = &swarm.GlobalService{}
270
-		return nil
271
-	}
272
-
273
-	if flags.Changed(flagReplicas) {
274
-		replicas := flags.Lookup(flagReplicas).Value.(*Uint64Opt).Value()
275
-		serviceMode.Replicated = &swarm.ReplicatedService{Replicas: replicas}
276
-		serviceMode.Global = nil
277
-		return nil
278
-	}
279
-
280
-	if mode == "replicated" {
281
-		if serviceMode.Replicated != nil {
282
-			return nil
283
-		}
284
-		serviceMode.Replicated = &swarm.ReplicatedService{Replicas: &DefaultReplicas}
285
-		serviceMode.Global = nil
286
-	}
287
-
261
+	serviceMode.Replicated.Replicas = flags.Lookup(flagReplicas).Value.(*Uint64Opt).Value()
288 262
 	return nil
289 263
 }