From 559c4980983eb1ab3e0eb2c5b7641f772fb36210 Mon Sep 17 00:00:00 2001 From: s-hertel Date: Mon, 30 Oct 2017 14:57:08 -0400 Subject: [PATCH] docker_service: add an option to try to cast potential integers and floats --- .../modules/cloud/docker/docker_service.py | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/ansible/modules/cloud/docker/docker_service.py b/lib/ansible/modules/cloud/docker/docker_service.py index 372e0770fcc05e..bb3c0aef5c43e6 100755 --- a/lib/ansible/modules/cloud/docker/docker_service.py +++ b/lib/ansible/modules/cloud/docker/docker_service.py @@ -148,6 +148,12 @@ required: false type: bool default: false + numbers_in_definition: + description: + - If there are floats or integers in C(definition) and this option is set to True, + any strings that are integers or floats will be cast as such (with the exception of version). + type: bool + default: false extends_documentation_fragment: - docker @@ -470,7 +476,7 @@ DEFAULT_TIMEOUT = 10 from ansible.module_utils.docker_common import AnsibleDockerClient, DockerBaseClass - +from ansible.module_utils.six import string_types AUTH_PARAM_MAPPING = { u'docker_host': u'--host', @@ -632,6 +638,8 @@ def __init__(self, client): self.project_src = tempfile.mkdtemp(prefix="ansible") compose_file = os.path.join(self.project_src, "docker-compose.yml") try: + if client.module.params.get('numbers_in_definition'): + self.definition = self.convert_to_numbers(dict(self.definition)) self.log('writing: ') self.log(yaml.dump(self.definition, default_flow_style=False)) with open(compose_file, 'w') as f: @@ -648,6 +656,25 @@ def __init__(self, client): except Exception as exc: self.client.fail("Configuration error - %s" % str(exc)) + def convert_to_numbers(self, definition): + for (key, value) in definition.items(): + if key == "version": + pass + elif isinstance(value, string_types): + if '.' in value: + try: + definition[key] = float(value) + except ValueError: + pass + else: + try: + definition[key] = int(value) + except ValueError: + pass + elif isinstance(value, dict): + definition[key] = self.convert_to_numbers(dict(value)) + return definition + def exec_module(self): result = dict() @@ -1044,7 +1071,8 @@ def main(): pull=dict(type='bool', default=False), nocache=dict(type='bool', default=False), debug=dict(type='bool', default=False), - timeout=dict(type='int', default=DEFAULT_TIMEOUT) + timeout=dict(type='int', default=DEFAULT_TIMEOUT), + numbers_in_definition=dict(type='bool', default=False), ) mutually_exclusive = [