From 9f3307dc640ac69dc2b559b73381a8fe85de649c Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Sun, 8 Jun 2025 17:04:10 +0200 Subject: [PATCH] Work around Docker not returning true configured command when command is []. --- .../module_container/docker_api.py | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/plugins/module_utils/module_container/docker_api.py b/plugins/module_utils/module_container/docker_api.py index 277ccd22..fcfdf290 100644 --- a/plugins/module_utils/module_container/docker_api.py +++ b/plugins/module_utils/module_container/docker_api.py @@ -1274,6 +1274,35 @@ def _preprocess_container_names(module, client, api_version, value): return 'container:{0}'.format(container['Id']) +def _get_value_command(module, container, api_version, options, image, host_info): + value = container['Config'].get('Cmd', _SENTRY) + if value is _SENTRY: + return {} + return {"command": value} + + +def _set_value_command(module, data, api_version, options, values): + if "command" not in values: + return + value = values["command"] + data['Cmd'] = value + + +def _get_expected_values_command(module, client, api_version, options, image, values, host_info): + expected_values = {} + if 'command' in values: + command = values['command'] + if command == [] and image and image["Config"].get("Cmd"): + command = image["Config"].get("Cmd") + expected_values['command'] = command + return expected_values + + + +def _needs_container_image_command(values): + return values.get('command') == [] + + OPTION_AUTO_REMOVE.add_engine('docker_api', DockerAPIEngine.host_config_value('AutoRemove')) OPTION_BLKIO_WEIGHT.add_engine('docker_api', DockerAPIEngine.host_config_value('BlkioWeight', update_parameter='BlkioWeight')) @@ -1286,7 +1315,12 @@ OPTION_CGROUP_NS_MODE.add_engine('docker_api', DockerAPIEngine.host_config_value OPTION_CGROUP_PARENT.add_engine('docker_api', DockerAPIEngine.host_config_value('CgroupParent')) -OPTION_COMMAND.add_engine('docker_api', DockerAPIEngine.config_value('Cmd')) +OPTION_COMMAND.add_engine('docker_api', DockerAPIEngine( + get_value=_get_value_command, + set_value=_set_value_command, + get_expected_values=_get_expected_values_command, + needs_container_image=_needs_container_image_command, +)) OPTION_CPU_PERIOD.add_engine('docker_api', DockerAPIEngine.host_config_value('CpuPeriod', update_parameter='CpuPeriod'))