From 122e73d062f33ec4a39deeae34d9deb96d355a0e Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 4 Mar 2019 16:35:22 +0100 Subject: [PATCH] [2.7] docker_swarm_service: fix problem with UpdateConfig on certain docker daemons (#53224) * Avoid KeyError when UpdateConfig isn't returned. * Add changelog. --- .../53224-docker_swarm_service-UpdateConfig.yml | 2 ++ .../modules/cloud/docker/docker_swarm_service.py | 16 +++++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/53224-docker_swarm_service-UpdateConfig.yml diff --git a/changelogs/fragments/53224-docker_swarm_service-UpdateConfig.yml b/changelogs/fragments/53224-docker_swarm_service-UpdateConfig.yml new file mode 100644 index 00000000000..ac70a2f04d4 --- /dev/null +++ b/changelogs/fragments/53224-docker_swarm_service-UpdateConfig.yml @@ -0,0 +1,2 @@ +bugfixes: +- "docker_swarm_service - fix problem with docker daemons which do not return ``UpdateConfig`` in the swarm service spec." diff --git a/lib/ansible/modules/cloud/docker/docker_swarm_service.py b/lib/ansible/modules/cloud/docker/docker_swarm_service.py index 4292689351f..e5a6fdc72f2 100644 --- a/lib/ansible/modules/cloud/docker/docker_swarm_service.py +++ b/lib/ansible/modules/cloud/docker/docker_swarm_service.py @@ -897,18 +897,20 @@ class DockerServiceManager(): ds = DockerService() task_template_data = raw_data['Spec']['TaskTemplate'] - update_config_data = raw_data['Spec']['UpdateConfig'] ds.image = task_template_data['ContainerSpec']['Image'] ds.user = task_template_data['ContainerSpec'].get('User', 'root') ds.env = task_template_data['ContainerSpec'].get('Env', []) ds.args = task_template_data['ContainerSpec'].get('Args', []) - ds.update_delay = update_config_data['Delay'] - ds.update_parallelism = update_config_data['Parallelism'] - ds.update_failure_action = update_config_data['FailureAction'] - ds.update_monitor = update_config_data['Monitor'] - ds.update_max_failure_ratio = update_config_data['MaxFailureRatio'] - ds.update_order = update_config_data['Order'] + + update_config_data = raw_data['Spec'].get('UpdateConfig') + if update_config_data: + ds.update_delay = update_config_data['Delay'] + ds.update_parallelism = update_config_data['Parallelism'] + ds.update_failure_action = update_config_data['FailureAction'] + ds.update_monitor = update_config_data['Monitor'] + ds.update_max_failure_ratio = update_config_data['MaxFailureRatio'] + ds.update_order = update_config_data['Order'] dns_config = task_template_data['ContainerSpec'].get('DNSConfig', None) if dns_config: