DockerCLI/opts
Sebastiaan van Stijn f2424bd375
Fix labels copying value from environment variables
This patch fixes a bug where labels use the same behavior as `--env`, resulting
in a value to be copied from environment variables with the same name as the
label if no value is set (i.e. a simple key, no `=` sign, no value).

An earlier pull request addressed similar cases for `docker run`;
2b17f4c8a8, but this did not address the
same situation for (e.g.) `docker service create`.

Digging in history for this bug, I found that use of the `ValidateEnv`
function for  labels was added in the original implementation of the labels feature in
abb5e9a077 (diff-ae476143d40e21ac0918630f7365ed3cR34)

However, the design never intended it to expand environment variables,
and use of this function was either due to either a "copy/paste" of the
equivalent `--env` flags, or a misunderstanding (the name `ValidateEnv` does
not communicate that it also expands environment variables), and the existing
`ValidateLabel` was designed for _engine_ labels (which required a value to
be set).

Following the initial implementation, other parts of the code followed
the same (incorrect) approach, therefore leading the bug to be introduced
in services as well.

This patch:

- updates the `ValidateLabel` to match the expected validation
  rules (this function is no longer used since 31dc5c0a9a),
  and the daemon has its own implementation)
- corrects various locations in the code where `ValidateEnv` was used instead of `ValidateLabel`.

Before this patch:

```bash
export SOME_ENV_VAR=I_AM_SOME_ENV_VAR
docker service create --label SOME_ENV_VAR --tty --name test busybox

docker service inspect --format '{{json .Spec.Labels}}' test
{"SOME_ENV_VAR":"I_AM_SOME_ENV_VAR"}
```

After this patch:

```bash
export SOME_ENV_VAR=I_AM_SOME_ENV_VAR
docker service create --label SOME_ENV_VAR --tty --name test busybox

docker container inspect --format '{{json .Config.Labels}}' test
{"SOME_ENV_VAR":""}
```

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2019-03-19 03:01:57 +01:00
..
config.go Update CLI docs and add opts/config.go 2017-05-15 11:57:21 +02:00
duration.go Move duration opts into an opts package 2017-05-16 17:49:40 +02:00
duration_test.go Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
env.go Clean some stuff from runconfig that are cli only… 2017-05-15 11:57:20 +02:00
env_test.go Clean some stuff from runconfig that are cli only… 2017-05-15 11:57:20 +02:00
envfile.go import environment variables that are present 2018-07-02 07:37:12 +02:00
envfile_test.go add test for zero length variable name 2018-07-02 07:52:02 +02:00
file.go Fix labels copying value from environment variables 2019-03-19 03:01:57 +01:00
hosts.go set default schema to tcp for docker host 2018-10-16 10:32:03 +08:00
hosts_test.go gofmt with go-1.11 2018-10-11 01:54:38 -07:00
hosts_unix.go Finish linting opts and trust package. 2017-05-15 11:57:15 +02:00
hosts_windows.go Windows: Default to npipe transport 2017-05-15 11:57:18 +02:00
ip.go Convert dockerd to use cobra and pflag 2017-05-15 11:57:19 +02:00
ip_test.go golint: trust 2017-05-15 11:57:15 +02:00
mount.go support --mount type=bind,bind-nonrecursive,... 2019-01-10 12:07:46 +09:00
mount_test.go Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
network.go Add nakedret linter. 2017-10-12 11:48:51 -04:00
network_test.go Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
opts.go Fix labels copying value from environment variables 2019-03-19 03:01:57 +01:00
opts_test.go Fix labels copying value from environment variables 2019-03-19 03:01:57 +01:00
opts_unix.go Update docker daemon to dockerd 2017-05-15 11:57:20 +02:00
opts_windows.go Update docker daemon to dockerd 2017-05-15 11:57:20 +02:00
parse.go import environment variables that are present 2018-07-02 07:37:12 +02:00
port.go Fix mapping a range of host ports to a single container port 2018-06-12 11:54:02 +02:00
port_test.go Merge pull request #1102 from sfluor/1074-fix-mapping-a-range-of-host-ports-to-a-single-container-port 2018-07-06 14:41:00 +02:00
quotedstring.go Add unconvert linter 2017-06-14 16:54:27 -07:00
quotedstring_test.go Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
runtime.go Clean some stuff from runconfig that are cli only… 2017-05-15 11:57:20 +02:00
secret.go support custom paths for secrets 2017-05-15 11:57:21 +02:00
secret_test.go Update tests to use gotest.tools 👼 2018-06-08 18:24:26 +02:00
throttledevice.go Add unconvert linter 2017-06-14 16:54:27 -07:00
ulimit.go Clean some stuff from runconfig that are cli only… 2017-05-15 11:57:20 +02:00
ulimit_test.go Clean some stuff from runconfig that are cli only… 2017-05-15 11:57:20 +02:00
weightdevice.go Add gosimple lint 2017-06-14 16:55:08 -07:00