#!/usr/bin/python3 from salt.utils.dictdiffer import deep_diff 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=None, zone=None, recordname=None, recordtype="A", target=None, ttl=0): res_output = "" ret = { 'name': name, 'changes': {}, 'result': True, 'comment': 'Config is up to date' } if type(name) is not str: return _error(ret, 'Must provide name to ovhapi.domain_record_present') if type(zone) is not str: return _error(ret, 'Must provide dns zone to ovhapi.domain_record_present') if type(recordname) is not str: return _error(ret, 'Must provide record name to ovhapi.domain_record_present') if type(recordtype) is not str: return _error(ret, 'Must provide record type to ovhapi.domain_record_present') if type(target) is not str: return _error(ret, 'Must provide target to ovhapi.domain_record_present') client = __salt__['ovhapi.authenticate']() # check if record exists current_record = __salt__['ovhapi.domain_get_record'](zone=zone, fieldType=recordtype, subDomain=recordname, target=target, client=client) if current_record: new_record = __salt__['ovhapi.domain_put_record'](zone=zone, fieldType=recordtype, subDomain=recordname, target=target, current=current_record, client=client) diff = deep_diff(current_record,new_record) if diff == {}: ret['comment'] = f"No updates on record {recordname}" else: ret['changes'] = { "diff": diff } ret['comment'] = f"Updated record {recordname}" else: new_record = __salt__['ovhapi.domain_post_record'](zone=zone, subDomain=recordname, fieldType=recordtype, target=target, ttl=ttl, client=client) ret['changes'] = { "diff": f"{new_record}" } ret['comment'] = f"Created record {recordname}" return ret def domain_zone_refresh(name="", zone=""): ret = { 'name': name, 'changes': {}, 'result': True, 'comment': 'Zone is refreshed' } client = __salt__['ovhapi.authenticate']() ret['comment'] = __salt__['ovhapi.domain_refresh_zone'](zone=zone, client=client) return ret