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.

(cherry picked from commit d64b17731d)
pull/55406/head
Felix Fontein 7 years ago committed by Toshio Kuratomi
parent 1a499c6a6a
commit f27481a6e8

@ -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."

@ -1193,7 +1193,14 @@ class TaskParameters(DockerBaseClass):
if self.log_options is not None:
options['Config'] = dict()
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:
return LogConfig(**options)

@ -1739,6 +1739,7 @@
log_options:
labels: production_status
env: os,customer
max-file: 5
register: log_options_1
- name: log_options (idempotency)
@ -1751,6 +1752,7 @@
log_options:
env: os,customer
labels: production_status
max-file: 5
register: log_options_2
- name: log_options (less log options)
@ -1773,7 +1775,7 @@
log_driver: json-file
log_options:
labels: production_status
max-file: 1
max-size: 10m
stop_timeout: 1
register: log_options_4
@ -1787,6 +1789,8 @@
that:
- log_options_1 is 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_4 is changed

Loading…
Cancel
Save