diff --git a/lib/ansible/module_common.py b/lib/ansible/module_common.py index cc1b078b275..9a1d9034e0a 100644 --- a/lib/ansible/module_common.py +++ b/lib/ansible/module_common.py @@ -23,6 +23,9 @@ MODULE_COMMON = """ # == BEGIN DYNAMICALLY INSERTED CODE == MODULE_ARGS = "<>" +BOOLEANS_TRUE = ['yes', 'on', '1', 'true', 1] +BOOLEANS_FALSE = ['no', 'off', '0', 'false', 0] +BOOLEANS = BOOLEANS_TRUE + BOOLEANS_FALSE # ansible modules can be written in any language. To simplify # development of Python modules, the functions available here @@ -42,6 +45,7 @@ import shlex import subprocess import sys import syslog +import types try: from hashlib import md5 as _md5 @@ -128,6 +132,18 @@ class AnsibleModule(object): log_args = re.sub(r'password=.+ (.*)', r"password=NOT_LOGGING_PASSWORD \1", self.args) syslog.syslog(syslog.LOG_NOTICE, 'Invoked with %s' % log_args) + def boolean(self, arg): + ''' return a bool for the arg ''' + if type(arg) in types.StringTypes: + arg = arg.lower() + + if arg in BOOLEANS_TRUE: + return True + elif arg in BOOLEANS_FALSE: + return False + else: + self.fail_json(msg='Boolean %s not in either boolean list' % arg) + def jsonify(self, data): return json.dumps(data) diff --git a/library/apt b/library/apt index 1824b3c05d1..fa3a6ae4cd2 100755 --- a/library/apt +++ b/library/apt @@ -130,7 +130,7 @@ def main(): if p['package'] is None and p['update_cache'] != 'yes': module.fail_json(msg='pkg=name and/or update_cache=yes is required') - install_recommends = (p['install_recommends'] == 'yes') + install_recommends = module.boolean(p['install_recommends']) cache = apt.Cache() if p['default_release']: @@ -138,16 +138,13 @@ def main(): # reopen cache w/ modified config cache.open(progress=None) - if p['update_cache'] == 'yes': + if modules.boolean(p['update_cache']) cache.update() cache.open(progress=None) if p['package'] == None: module.exit_json(changed=False) - if p['force'] == 'yes': - force_yes = True - else: - force_yes = False + force_yes = modules.boolean(p['force']) if p['package'].count('=') > 1: module.fail_json(msg='invalid package spec') @@ -164,7 +161,7 @@ def main(): install(module, p['package'], cache, default_release=p['default_release'], install_recommends=install_recommends,force=force_yes) elif p['state'] == 'removed': - remove(module, p['package'], cache, purge == 'yes') + remove(module, p['package'], cache, purge = modules.boolean(p['purge'])) # this is magic, see lib/ansible/module_common.py #<>