Signed-off-by: Daniel Nephin <dnephin@docker.com>
| ... | ... |
@@ -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 |