#!/usr/bin/python import platform APT = "/usr/bin/apt-get" ADD_APT_REPOSITORY = None def _find_binary(): binaries = ['/usr/bin/add-apt-repository'] for e in binaries: if os.path.exists(e): return e module.fail_json(msg='Unabled to find any of the following executables ' '%s' % binaries) def _run(cmd): # returns (rc, stdout, stderr) from shell command process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) stdout, stderr = process.communicate() return (process.returncode, stdout, stderr) def main(): arg_spec = dict( repo=dict(required=True), state=dict(default='present', choices=['present', 'absent']) ) module = AnsibleModule(argument_spec=arg_spec) global ADD_APT_REPOSITORY ADD_APT_REPOSITORY = _find_binary() repo = module.params['repo'] state = module.params['state'] rc, out, err = _run('%s %s --remove' % (ADD_APT_REPOSITORY, repo)) existed = 'Error' not in out if state == 'absent': if not existed: module.exit_json(changed=False, repo=repo) else: module.exit_json(changed=True, repo=repo) cmd = '%s %s' % (ADD_APT_REPOSITORY, repo) if float(platform.dist()[1]) >= 11.10: cmd = cmd + ' -y' rc, out, err = _run(cmd) changed = rc == 0 and not existed if rc != 0: module.fail_json(msg=err) if changed: _run('%s update' % APT) module.exit_json(changed=changed, existed=existed, repo=repo, cmd=cmd) # this is magic, see lib/ansible/module_common.py #<> main()