ansible-role-mailman/library/mailman_list.py
2021-03-09 00:17:26 +01:00

71 lines
1.8 KiB
Python

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)
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 not module.check_mode:
ml.settings.save()
result['diff']['after'] = dict(ml.settings)
result['diff']['after'].update(module.params['settings'])
module.exit_json(**result)
def main():
run_module()
if __name__ == '__main__':
main()