From 31e6ede9ee9dc5ae0c00cc6b5d2b5428ddec29fa Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Tue, 6 Nov 2018 09:49:15 +0300 Subject: [PATCH] docker_service: parse scale parameter correctly to 2.6 (#47248) * fix: Parse docker_service scale parameter to int (#45508) * Changelog: add fragment for docker_service scale fix --- .../45508-parse-docker-service-parameter.yaml | 2 ++ lib/ansible/modules/cloud/docker/docker_service.py | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/45508-parse-docker-service-parameter.yaml diff --git a/changelogs/fragments/45508-parse-docker-service-parameter.yaml b/changelogs/fragments/45508-parse-docker-service-parameter.yaml new file mode 100644 index 00000000000..041dc5ddc51 --- /dev/null +++ b/changelogs/fragments/45508-parse-docker-service-parameter.yaml @@ -0,0 +1,2 @@ +bugfixes: + - docker_service - correctly parse string values for the `scale` parameter https://github.com/ansible/ansible/pull/45508 diff --git a/lib/ansible/modules/cloud/docker/docker_service.py b/lib/ansible/modules/cloud/docker/docker_service.py index 15492a97a76..7c92bcccb35 100644 --- a/lib/ansible/modules/cloud/docker/docker_service.py +++ b/lib/ansible/modules/cloud/docker/docker_service.py @@ -1009,17 +1009,25 @@ class ContainerManager(DockerBaseClass): scale=0 ) containers = service.containers(stopped=True) - if len(containers) != self.scale[service.name]: + scale = self.parse_scale(service.name) + if len(containers) != scale: result['changed'] = True - service_res['scale'] = self.scale[service.name] - len(containers) + service_res['scale'] = scale - len(containers) if not self.check_mode: try: - service.scale(int(self.scale[service.name])) + service.scale(scale) except Exception as exc: self.client.fail("Error scaling %s - %s" % (service.name, str(exc))) result['actions'].append(service_res) return result + def parse_scale(self, service_name): + try: + return int(self.scale[service_name]) + except ValueError: + self.client.fail("Error scaling %s - expected int, got %s", + service_name, str(type(self.scale[service_name]))) + def main(): argument_spec = dict(