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 0000000000..041dc5ddc5 --- /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 15492a97a7..7c92bcccb3 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(