#!/usr/bin/python3 from __future__ import absolute_import, print_function, unicode_literals import salt.utils.dictupdate import salt.utils.dictdiffer def _error(ret, err_msg): ret['result'] = False ret['comment'] = err_msg return ret def _str_split(string): delim = "\n" return [e + delim for e in string.split(delim) if e] def domain_record_present(name, zone=None, recordname=None, recordtype=None, target=None, ttl=0): ret = { 'name': name, 'changes': {}, 'result': True, 'comment': 'Config is up to date' } if name is None: return _error(ret, 'Must provide name to ovhapi.domain_record_present') if zone is None: return _error(ret, 'Must provide dns zone to ovhapi.domain_record_present') if recordname is None: return _error(ret, 'Must provide record name to ovhapi.domain_record_present') if recordtype is None: return _error(ret, 'Must provide record type to ovhapi.domain_record_present') if target is None: return _error(ret, 'Must provide target to ovhapi.domain_record_present') # check if record exists if len(__salt__['ovhapi.domain_get_record'](zone=zone, fieldType=recordtype, subDomain=recordname)): ret['comment'] = f"Record on {zone} named {recordname} with type {recordtype} already exists" return ret cur_zone_state = __salt__['ovhapi.domain_get_zone'](zone=zone) cur_zone_refresh = __salt__['ovhapi.domain_refresh_zone'](zone=zone) res = __salt__['ovhapi.domain_post_record']( zone=zone, subDomain=recordname, fieldType=recordtype, target=target, ttl=ttl) new_zone_state = __salt__['ovhapi.domain_get_zone'](zone=zone) ret['changes'] = { "diff": salt.utils.stringutils.get_diff(_str_split(cur_zone_state), _str_split(new_zone_state)) } ret['comment'] = f'Result is {res}' return ret