Browse code

Merge pull request #28186 from yongtang/27567-follow-up-dns-options

Add `--dns-option` to `docker run` and hide `--dns-opt`

Sebastiaan van Stijn authored on 2016/11/11 00:20:17
Showing 15 changed files
... ...
@@ -43,7 +43,7 @@ func newCreateCommand(dockerCli *command.DockerCli) *cobra.Command {
43 43
 	flags.VarP(&opts.endpoint.ports, flagPublish, "p", "Publish a port as a node port")
44 44
 	flags.Var(&opts.groups, flagGroup, "Set one or more supplementary user groups for the container")
45 45
 	flags.Var(&opts.dns, flagDNS, "Set custom DNS servers")
46
-	flags.Var(&opts.dnsOptions, flagDNSOptions, "Set DNS options")
46
+	flags.Var(&opts.dnsOption, flagDNSOption, "Set DNS options")
47 47
 	flags.Var(&opts.dnsSearch, flagDNSSearch, "Set custom DNS search domains")
48 48
 
49 49
 	flags.SetInterspersed(false)
... ...
@@ -413,7 +413,7 @@ type serviceOptions struct {
413 413
 	mounts          opts.MountOpt
414 414
 	dns             opts.ListOpts
415 415
 	dnsSearch       opts.ListOpts
416
-	dnsOptions      opts.ListOpts
416
+	dnsOption       opts.ListOpts
417 417
 
418 418
 	resources resourceOptions
419 419
 	stopGrace DurationOpt
... ...
@@ -445,12 +445,12 @@ func newServiceOptions() *serviceOptions {
445 445
 		endpoint: endpointOptions{
446 446
 			ports: opts.NewListOpts(ValidatePort),
447 447
 		},
448
-		groups:     opts.NewListOpts(nil),
449
-		logDriver:  newLogDriverOptions(),
450
-		dns:        opts.NewListOpts(opts.ValidateIPAddress),
451
-		dnsOptions: opts.NewListOpts(nil),
452
-		dnsSearch:  opts.NewListOpts(opts.ValidateDNSSearch),
453
-		networks:   opts.NewListOpts(nil),
448
+		groups:    opts.NewListOpts(nil),
449
+		logDriver: newLogDriverOptions(),
450
+		dns:       opts.NewListOpts(opts.ValidateIPAddress),
451
+		dnsOption: opts.NewListOpts(nil),
452
+		dnsSearch: opts.NewListOpts(opts.ValidateDNSSearch),
453
+		networks:  opts.NewListOpts(nil),
454 454
 	}
455 455
 }
456 456
 
... ...
@@ -496,7 +496,7 @@ func (opts *serviceOptions) ToService() (swarm.ServiceSpec, error) {
496 496
 				DNSConfig: &swarm.DNSConfig{
497 497
 					Nameservers: opts.dns.GetAll(),
498 498
 					Search:      opts.dnsSearch.GetAll(),
499
-					Options:     opts.dnsOptions.GetAll(),
499
+					Options:     opts.dnsOption.GetAll(),
500 500
 				},
501 501
 				StopGracePeriod: opts.stopGrace.Value(),
502 502
 				Secrets:         nil,
... ...
@@ -597,9 +597,9 @@ const (
597 597
 	flagDNS                   = "dns"
598 598
 	flagDNSRemove             = "dns-rm"
599 599
 	flagDNSAdd                = "dns-add"
600
-	flagDNSOptions            = "dns-options"
601
-	flagDNSOptionsRemove      = "dns-options-rm"
602
-	flagDNSOptionsAdd         = "dns-options-add"
600
+	flagDNSOption             = "dns-option"
601
+	flagDNSOptionRemove       = "dns-option-rm"
602
+	flagDNSOptionAdd          = "dns-option-add"
603 603
 	flagDNSSearch             = "dns-search"
604 604
 	flagDNSSearchRemove       = "dns-search-rm"
605 605
 	flagDNSSearchAdd          = "dns-search-add"
... ...
@@ -49,9 +49,9 @@ func newUpdateCommand(dockerCli *command.DockerCli) *cobra.Command {
49 49
 	flags.Var(newListOptsVar(), flagMountRemove, "Remove a mount by its target path")
50 50
 	flags.Var(newListOptsVar(), flagPublishRemove, "Remove a published port by its target port")
51 51
 	flags.Var(newListOptsVar(), flagConstraintRemove, "Remove a constraint")
52
-	flags.Var(newListOptsVar(), flagDNSRemove, "Remove custom DNS servers")
53
-	flags.Var(newListOptsVar(), flagDNSOptionsRemove, "Remove DNS options")
54
-	flags.Var(newListOptsVar(), flagDNSSearchRemove, "Remove DNS search domains")
52
+	flags.Var(newListOptsVar(), flagDNSRemove, "Remove a custom DNS server")
53
+	flags.Var(newListOptsVar(), flagDNSOptionRemove, "Remove a DNS option")
54
+	flags.Var(newListOptsVar(), flagDNSSearchRemove, "Remove a DNS search domain")
55 55
 	flags.Var(&opts.labels, flagLabelAdd, "Add or update a service label")
56 56
 	flags.Var(&opts.containerLabels, flagContainerLabelAdd, "Add or update a container label")
57 57
 	flags.Var(&opts.env, flagEnvAdd, "Add or update an environment variable")
... ...
@@ -61,9 +61,9 @@ func newUpdateCommand(dockerCli *command.DockerCli) *cobra.Command {
61 61
 	flags.Var(&opts.constraints, flagConstraintAdd, "Add or update a placement constraint")
62 62
 	flags.Var(&opts.endpoint.ports, flagPublishAdd, "Add or update a published port")
63 63
 	flags.Var(&opts.groups, flagGroupAdd, "Add an additional supplementary user group to the container")
64
-	flags.Var(&opts.dns, flagDNSAdd, "Add or update custom DNS servers")
65
-	flags.Var(&opts.dnsOptions, flagDNSOptionsAdd, "Add or update DNS options")
66
-	flags.Var(&opts.dnsSearch, flagDNSSearchAdd, "Add or update custom DNS search domains")
64
+	flags.Var(&opts.dns, flagDNSAdd, "Add or update a custom DNS server")
65
+	flags.Var(&opts.dnsOption, flagDNSOptionAdd, "Add or update a DNS option")
66
+	flags.Var(&opts.dnsSearch, flagDNSSearchAdd, "Add or update a custom DNS search domain")
67 67
 
68 68
 	return cmd
69 69
 }
... ...
@@ -274,7 +274,7 @@ func updateService(flags *pflag.FlagSet, spec *swarm.ServiceSpec) error {
274 274
 		}
275 275
 	}
276 276
 
277
-	if anyChanged(flags, flagDNSAdd, flagDNSRemove, flagDNSOptionsAdd, flagDNSOptionsRemove, flagDNSSearchAdd, flagDNSSearchRemove) {
277
+	if anyChanged(flags, flagDNSAdd, flagDNSRemove, flagDNSOptionAdd, flagDNSOptionRemove, flagDNSSearchAdd, flagDNSSearchRemove) {
278 278
 		if cspec.DNSConfig == nil {
279 279
 			cspec.DNSConfig = &swarm.DNSConfig{}
280 280
 		}
... ...
@@ -586,12 +586,12 @@ func updateDNSConfig(flags *pflag.FlagSet, config **swarm.DNSConfig) error {
586 586
 	sort.Strings(newConfig.Search)
587 587
 
588 588
 	options := (*config).Options
589
-	if flags.Changed(flagDNSOptionsAdd) {
590
-		values := flags.Lookup(flagDNSOptionsAdd).Value.(*opts.ListOpts).GetAll()
589
+	if flags.Changed(flagDNSOptionAdd) {
590
+		values := flags.Lookup(flagDNSOptionAdd).Value.(*opts.ListOpts).GetAll()
591 591
 		options = append(options, values...)
592 592
 	}
593 593
 	options = removeDuplicates(options)
594
-	toRemove = buildToRemoveSet(flags, flagDNSOptionsRemove)
594
+	toRemove = buildToRemoveSet(flags, flagDNSOptionRemove)
595 595
 	for _, option := range options {
596 596
 		if _, exists := toRemove[option]; !exists {
597 597
 			newConfig.Options = append(newConfig.Options, option)
... ...
@@ -142,8 +142,8 @@ func TestUpdateDNSConfig(t *testing.T) {
142 142
 	// Invalid dns search domain
143 143
 	assert.Error(t, flags.Set("dns-search-add", "example$com"), "example$com is not a valid domain")
144 144
 
145
-	flags.Set("dns-options-add", "ndots:9")
146
-	flags.Set("dns-options-rm", "timeout:3")
145
+	flags.Set("dns-option-add", "ndots:9")
146
+	flags.Set("dns-option-rm", "timeout:3")
147 147
 
148 148
 	config := &swarm.DNSConfig{
149 149
 		Nameservers: []string{"3.3.3.3", "5.5.5.5"},
... ...
@@ -1248,7 +1248,7 @@ _docker_container_run() {
1248 1248
 		--device-write-bps
1249 1249
 		--device-write-iops
1250 1250
 		--dns
1251
-		--dns-opt
1251
+		--dns-option
1252 1252
 		--dns-search
1253 1253
 		--entrypoint
1254 1254
 		--env -e
... ...
@@ -531,7 +531,7 @@ __docker_container_subcommand() {
531 531
         "($help)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: "
532 532
         "($help)--disable-content-trust[Skip image verification]"
533 533
         "($help)*--dns=[Custom DNS servers]:DNS server: "
534
-        "($help)*--dns-opt=[Custom DNS options]:DNS option: "
534
+        "($help)*--dns-option=[Custom DNS options]:DNS option: "
535 535
         "($help)*--dns-search=[Custom DNS search domains]:DNS domains: "
536 536
         "($help)*"{-e=,--env=}"[Environment variables]:environment variable: "
537 537
         "($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: "
... ...
@@ -50,7 +50,7 @@ Options:
50 50
       --device-write-iops value     Limit write rate (IO per second) to a device (default [])
51 51
       --disable-content-trust       Skip image verification (default true)
52 52
       --dns value                   Set custom DNS servers (default [])
53
-      --dns-opt value               Set DNS options (default [])
53
+      --dns-option value            Set DNS options (default [])
54 54
       --dns-search value            Set custom DNS search domains (default [])
55 55
       --entrypoint string           Overwrite the default ENTRYPOINT of the image
56 56
   -e, --env value                   Set environment variables (default [])
... ...
@@ -54,7 +54,7 @@ Options:
54 54
       --device-write-iops value     Limit write rate (IO per second) to a device (default [])
55 55
       --disable-content-trust       Skip image verification (default true)
56 56
       --dns value                   Set custom DNS servers (default [])
57
-      --dns-opt value               Set DNS options (default [])
57
+      --dns-option value            Set DNS options (default [])
58 58
       --dns-search value            Set custom DNS search domains (default [])
59 59
       --entrypoint string           Overwrite the default ENTRYPOINT of the image
60 60
   -e, --env value                   Set environment variables (default [])
... ...
@@ -24,7 +24,7 @@ Options:
24 24
       --constraint list                  Placement constraints (default [])
25 25
       --container-label list             Container labels (default [])
26 26
       --dns list                         Set custom DNS servers (default [])
27
-      --dns-options list                 Set DNS options (default [])
27
+      --dns-option list                  Set DNS options (default [])
28 28
       --dns-search list                  Set custom DNS search domains (default [])
29 29
       --endpoint-mode string             Endpoint mode (vip or dnsrr)
30 30
   -e, --env list                         Set environment variables (default [])
... ...
@@ -26,12 +26,12 @@ Options:
26 26
       --constraint-rm list               Remove a constraint (default [])
27 27
       --container-label-add list         Add or update a container label (default [])
28 28
       --container-label-rm list          Remove a container label by its key (default [])
29
-      --dns-add list                     Add or update custom DNS servers (default [])
30
-      --dns-options-add list             Add or update DNS options (default [])
31
-      --dns-options-rm list              Remove DNS options (default [])
32
-      --dns-rm list                      Remove custom DNS servers (default [])
33
-      --dns-search-add list              Add or update custom DNS search domains (default [])
34
-      --dns-search-rm list               Remove DNS search domains (default [])
29
+      --dns-add list                     Add or update a custom DNS server (default [])
30
+      --dns-option-add list              Add or update a DNS option (default [])
31
+      --dns-option-rm list               Remove a DNS option (default [])
32
+      --dns-rm list                      Remove a custom DNS server (default [])
33
+      --dns-search-add list              Add or update a custom DNS search domain (default [])
34
+      --dns-search-rm list               Remove a DNS search domain (default [])
35 35
       --endpoint-mode string             Endpoint mode (vip or dnsrr)
36 36
       --env-add list                     Add or update an environment variable (default [])
37 37
       --env-rm list                      Remove an environment variable (default [])
... ...
@@ -388,7 +388,7 @@ network mode a container has its own UTS namespace by default. As such
388 388
 `--hostname` is allowed in `host` network mode and will only change the
389 389
 hostname inside the container.
390 390
 Similar to `--hostname`, the `--add-host`, `--dns`, `--dns-search`, and
391
-`--dns-opt` options can be used in `host` network mode. These options update
391
+`--dns-option` options can be used in `host` network mode. These options update
392 392
 `/etc/hosts` or `/etc/resolv.conf` inside the container. No change are made to
393 393
 `/etc/hosts` and `/etc/resolv.conf` on the host.
394 394
 
... ...
@@ -407,7 +407,7 @@ or a High Performance Web Server.
407 407
 With the network set to `container` a container will share the
408 408
 network stack of another container.  The other container's name must be
409 409
 provided in the format of `--network container:<name|id>`. Note that `--add-host`
410
-`--hostname` `--dns` `--dns-search` `--dns-opt` and `--mac-address` are
410
+`--hostname` `--dns` `--dns-search` `--dns-option` and `--mac-address` are
411 411
 invalid in `container` netmode, and `--publish` `--publish-all` `--expose` are
412 412
 also invalid in `container` netmode.
413 413
 
... ...
@@ -811,7 +811,7 @@ func (s *DockerSwarmSuite) TestDNSConfig(c *check.C) {
811 811
 
812 812
 	// Create a service
813 813
 	name := "top"
814
-	_, err := d.Cmd("service", "create", "--name", name, "--dns=1.2.3.4", "--dns-search=example.com", "--dns-options=timeout:3", "busybox", "top")
814
+	_, err := d.Cmd("service", "create", "--name", name, "--dns=1.2.3.4", "--dns-search=example.com", "--dns-option=timeout:3", "busybox", "top")
815 815
 	c.Assert(err, checker.IsNil)
816 816
 
817 817
 	// Make sure task has been deployed.
... ...
@@ -844,7 +844,7 @@ func (s *DockerSwarmSuite) TestDNSConfigUpdate(c *check.C) {
844 844
 	// Make sure task has been deployed.
845 845
 	waitAndAssert(c, defaultReconciliationTimeout, d.checkActiveContainerCount, checker.Equals, 1)
846 846
 
847
-	_, err = d.Cmd("service", "update", "--dns-add=1.2.3.4", "--dns-search-add=example.com", "--dns-options-add=timeout:3", name)
847
+	_, err = d.Cmd("service", "update", "--dns-add=1.2.3.4", "--dns-search-add=example.com", "--dns-option-add=timeout:3", name)
848 848
 	c.Assert(err, checker.IsNil)
849 849
 
850 850
 	out, err := d.Cmd("service", "inspect", "--format", "{{ .Spec.TaskTemplate.ContainerSpec.DNSConfig }}", name)
... ...
@@ -31,7 +31,7 @@ docker-create - Create a new container
31 31
 [**--device-write-iops**[=*[]*]]
32 32
 [**--dns**[=*[]*]]
33 33
 [**--dns-search**[=*[]*]]
34
-[**--dns-opt**[=*[]*]]
34
+[**--dns-option**[=*[]*]]
35 35
 [**-e**|**--env**[=*[]*]]
36 36
 [**--entrypoint**[=*ENTRYPOINT*]]
37 37
 [**--env-file**[=*[]*]]
... ...
@@ -190,7 +190,7 @@ two memory nodes.
190 190
 **--dns**=[]
191 191
    Set custom DNS servers
192 192
 
193
-**--dns-opt**=[]
193
+**--dns-option**=[]
194 194
    Set custom DNS options
195 195
 
196 196
 **--dns-search**=[]
... ...
@@ -32,7 +32,7 @@ docker-run - Run a command in a new container
32 32
 [**--device-write-bps**[=*[]*]]
33 33
 [**--device-write-iops**[=*[]*]]
34 34
 [**--dns**[=*[]*]]
35
-[**--dns-opt**[=*[]*]]
35
+[**--dns-option**[=*[]*]]
36 36
 [**--dns-search**[=*[]*]]
37 37
 [**-e**|**--env**[=*[]*]]
38 38
 [**--entrypoint**[=*ENTRYPOINT*]]
... ...
@@ -260,7 +260,7 @@ See **config-json(5)** for documentation on using a configuration file.
260 260
 **--dns-search**=[]
261 261
    Set custom DNS search domains (Use --dns-search=. if you don't wish to set the search domain)
262 262
 
263
-**--dns-opt**=[]
263
+**--dns-option**=[]
264 264
    Set custom DNS options
265 265
 
266 266
 **--dns**=[]
... ...
@@ -187,7 +187,11 @@ func AddFlags(flags *pflag.FlagSet) *ContainerOptions {
187 187
 	// Network and port publishing flag
188 188
 	flags.Var(&copts.extraHosts, "add-host", "Add a custom host-to-IP mapping (host:ip)")
189 189
 	flags.Var(&copts.dns, "dns", "Set custom DNS servers")
190
+	// We allow for both "--dns-opt" and "--dns-option", although the latter is the recommended way.
191
+	// This is to be consistent with service create/update
190 192
 	flags.Var(&copts.dnsOptions, "dns-opt", "Set DNS options")
193
+	flags.Var(&copts.dnsOptions, "dns-option", "Set DNS options")
194
+	flags.MarkHidden("dns-opt")
191 195
 	flags.Var(&copts.dnsSearch, "dns-search", "Set custom DNS search domains")
192 196
 	flags.Var(&copts.expose, "expose", "Expose a port or a range of ports")
193 197
 	flags.StringVar(&copts.ipv4Address, "ip", "", "Container IPv4 address (e.g. 172.30.100.104)")