1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

docker_container: improve log_options idempotency by converting to string (#54955)

* Warn when log_options values are not strings.

* Add changelog.

* Improve message.

* Improve formatting and formulation of other messages.

* Add test for warning.

* Trying double escaping.
This commit is contained in:
Felix Fontein 2019-04-13 00:36:11 +02:00 committed by ansibot
parent 6ff4547489
commit d64b17731d
3 changed files with 19 additions and 6 deletions

View file

@ -0,0 +1,2 @@
bugfixes:
- "docker_container - fix idempotency of ``log_options`` when non-string values are used. Also warn user that this is the case."

View file

@ -1586,7 +1586,14 @@ class TaskParameters(DockerBaseClass):
if self.log_options is not None: if self.log_options is not None:
options['Config'] = dict() options['Config'] = dict()
for k, v in self.log_options.items(): for k, v in self.log_options.items():
options['Config'][k] = str(v) if not isinstance(v, string_types):
self.client.module.warn(
"Non-string value found for log_options option '%s'. The value is automatically converted to '%s'. "
"If this is not correct, or you want to avoid such warnings, please quote the value." % (k, str(v))
)
v = str(v)
self.log_options[k] = v
options['Config'][k] = v
try: try:
return LogConfig(**options) return LogConfig(**options)
@ -1622,8 +1629,8 @@ class TaskParameters(DockerBaseClass):
if self.env: if self.env:
for name, value in self.env.items(): for name, value in self.env.items():
if not isinstance(value, string_types): if not isinstance(value, string_types):
self.fail("Non-string value found for env option. " self.fail("Non-string value found for env option. Ambiguous env options must be "
"Ambiguous env options must be wrapped in quotes to avoid YAML parsing. Key: %s" % (name, )) "wrapped in quotes to avoid them being interpreted. Key: %s" % (name, ))
final_env[name] = str(value) final_env[name] = str(value)
return final_env return final_env
@ -2761,8 +2768,8 @@ class AnsibleDockerClientContainer(AnsibleDockerClient):
key_main = comp_aliases.get(key) key_main = comp_aliases.get(key)
if key_main is None: if key_main is None:
if key_main in all_options: if key_main in all_options:
self.fail(("The module option '%s' cannot be specified in the comparisons dict," + self.fail("The module option '%s' cannot be specified in the comparisons dict, "
" since it does not correspond to container's state!") % key) "since it does not correspond to container's state!" % key)
self.fail("Unknown module option '%s' in comparisons dict!" % key) self.fail("Unknown module option '%s' in comparisons dict!" % key)
if key_main in comp_aliases_used: if key_main in comp_aliases_used:
self.fail("Both '%s' and '%s' (aliases of %s) are specified in comparisons dict!" % (key, comp_aliases_used[key_main], key_main)) self.fail("Both '%s' and '%s' (aliases of %s) are specified in comparisons dict!" % (key, comp_aliases_used[key_main], key_main))

View file

@ -2125,6 +2125,7 @@
log_options: log_options:
labels: production_status labels: production_status
env: os,customer env: os,customer
max-file: 5
register: log_options_1 register: log_options_1
- name: log_options (idempotency) - name: log_options (idempotency)
@ -2137,6 +2138,7 @@
log_options: log_options:
env: os,customer env: os,customer
labels: production_status labels: production_status
max-file: 5
register: log_options_2 register: log_options_2
- name: log_options (less log options) - name: log_options (less log options)
@ -2159,7 +2161,7 @@
log_driver: json-file log_driver: json-file
log_options: log_options:
labels: production_status labels: production_status
max-file: 1 max-size: 10m
force_kill: yes force_kill: yes
register: log_options_4 register: log_options_4
@ -2174,6 +2176,8 @@
that: that:
- log_options_1 is changed - log_options_1 is changed
- log_options_2 is not changed - log_options_2 is not changed
- "'Non-string value found for log_options option \\'max-file\\'. The value is automatically converted to \\'5\\'. If this is not correct, or you want to
avoid such warnings, please quote the value.' in log_options_2.warnings"
- log_options_3 is not changed - log_options_3 is not changed
- log_options_4 is changed - log_options_4 is changed