Browse code

Merge service command and args as a string.

Signed-off-by: Daniel Nephin <dnephin@docker.com>

Daniel Nephin authored on 2016/06/25 04:03:26
Showing 3 changed files
... ...
@@ -13,6 +13,7 @@ import (
13 13
 	"github.com/docker/engine-api/types"
14 14
 	"github.com/docker/engine-api/types/swarm"
15 15
 	"github.com/docker/go-connections/nat"
16
+	shlex "github.com/flynn-archive/go-shlex"
16 17
 	"github.com/spf13/cobra"
17 18
 	"github.com/spf13/pflag"
18 19
 )
... ...
@@ -31,7 +32,7 @@ func newUpdateCommand(dockerCli *client.DockerCli) *cobra.Command {
31 31
 
32 32
 	flags := cmd.Flags()
33 33
 	flags.String("image", "", "Service image tag")
34
-	flags.StringSlice("arg", []string{}, "Service command args")
34
+	flags.String("args", "", "Service command args")
35 35
 	addServiceFlags(cmd, opts)
36 36
 	return cmd
37 37
 }
... ...
@@ -91,12 +92,6 @@ func updateService(flags *pflag.FlagSet, spec *swarm.ServiceSpec) error {
91 91
 		}
92 92
 	}
93 93
 
94
-	updateSlice := func(flag string, field *[]string) {
95
-		if flags.Changed(flag) {
96
-			*field, _ = flags.GetStringSlice(flag)
97
-		}
98
-	}
99
-
100 94
 	updateInt64Value := func(flag string, field *int64) {
101 95
 		if flags.Changed(flag) {
102 96
 			*field = flags.Lookup(flag).Value.(int64Value).Value()
... ...
@@ -140,7 +135,7 @@ func updateService(flags *pflag.FlagSet, spec *swarm.ServiceSpec) error {
140 140
 	updateString(flagName, &spec.Name)
141 141
 	updateLabels(flags, &spec.Labels)
142 142
 	updateString("image", &cspec.Image)
143
-	updateSlice("arg", &cspec.Args)
143
+	updateStringToSlice(flags, "args", &cspec.Args)
144 144
 	updateListOpts("env", &cspec.Env)
145 145
 	updateString("workdir", &cspec.Dir)
146 146
 	updateString(flagUser, &cspec.User)
... ...
@@ -174,10 +169,7 @@ func updateService(flags *pflag.FlagSet, spec *swarm.ServiceSpec) error {
174 174
 		updateDurationOpt((flagRestartWindow), task.RestartPolicy.Window)
175 175
 	}
176 176
 
177
-	if flags.Changed(flagConstraint) {
178
-		task.Placement = &swarm.Placement{}
179
-		updateSlice(flagConstraint, &task.Placement.Constraints)
180
-	}
177
+	// TODO: The constraints field is fixed in #23773
181 178
 
182 179
 	if err := updateReplicas(flags, &spec.Mode); err != nil {
183 180
 		return err
... ...
@@ -206,6 +198,17 @@ func updateService(flags *pflag.FlagSet, spec *swarm.ServiceSpec) error {
206 206
 	return nil
207 207
 }
208 208
 
209
+func updateStringToSlice(flags *pflag.FlagSet, flag string, field *[]string) error {
210
+	if !flags.Changed(flag) {
211
+		return nil
212
+	}
213
+
214
+	value, _ := flags.GetString(flag)
215
+	valueSlice, err := shlex.Split(value)
216
+	*field = valueSlice
217
+	return err
218
+}
219
+
209 220
 func updateLabels(flags *pflag.FlagSet, field *map[string]string) {
210 221
 	if !flags.Changed(flagLabel) {
211 222
 		return
... ...
@@ -9,8 +9,7 @@ import (
9 9
 
10 10
 func TestUpdateServiceArgs(t *testing.T) {
11 11
 	flags := newUpdateCommand(nil).Flags()
12
-	flags.Set("arg", "the")
13
-	flags.Set("arg", "new args")
12
+	flags.Set("args", "the \"new args\"")
14 13
 
15 14
 	spec := &swarm.ServiceSpec{}
16 15
 	cspec := &spec.TaskTemplate.ContainerSpec
... ...
@@ -164,5 +164,6 @@ clone git github.com/pkg/errors 01fa4104b9c248c8945d14d9f128454d5b28d595
164 164
 clone git github.com/spf13/cobra 75205f23b3ea70dc7ae5e900d074e010c23c37e9 https://github.com/dnephin/cobra.git
165 165
 clone git github.com/spf13/pflag cb88ea77998c3f024757528e3305022ab50b43be
166 166
 clone git github.com/inconshreveable/mousetrap 76626ae9c91c4f2a10f34cad8ce83ea42c93bb75
167
+clone git github.com/flynn-archive/go-shlex 3f9db97f856818214da2e1057f8ad84803971cff
167 168
 
168 169
 clean