import urllib from mailmanclient import Client from ansible.module_utils.basic import AnsibleModule MAILMAN_SUPPORTED_API_VERSION = '3.1' def run_module(): module_args = dict( api_url=dict(type='str', default='http://localhost:8001/3.1'), api_user=dict(type='str', default='restapi'), api_password=dict(type='str', required=True, no_log=True), name=dict(type='str', required=True), settings=dict(type='dict', default={}) ) result = dict( changed=False, message='', diff={'before': '', 'after': ''} ) module = AnsibleModule( argument_spec=module_args, supports_check_mode=True ) client = Client(module.params['api_url'], module.params['api_user'], module.params['api_password']) if not client.system['api_version'] == MAILMAN_SUPPORTED_API_VERSION: module.fail_json(msg='API version {} is not supported, only {} is supported'.format(client.system['api_version'], MAILMAN_SUPPORTED_API_VERSION)) ml = None try: ml = client.get_list(module.params['name']) except urllib.error.HTTPError as e: if e.code != 404: raise result['changed'] = True if module.check_mode: module.exit_json(**result) addr_domain =module.params['name'].split('@')[-1] addr_local = '@'.join(module.params['name'].split('@')[0:-1]) domain = client.get_domain(addr_domain) ml = domain.create_list(addr_local) ml_settings = ml.settings if result['changed']: result['diff']['before'] = None else: result['diff']['before'] = dict(ml_settings) for i in module.params['settings']: if ml_settings[i] != module.params['settings'][i]: result['changed'] = True ml_settings[i] = module.params['settings'][i] if module.check_mode: result['diff']['after'] = dict(ml.settings) result['diff']['after'].update(module.params['settings']) else: ml_settings.save() result['diff']['after'] = dict(ml.settings) module.exit_json(**result) def main(): run_module() if __name__ == '__main__': main()