68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
#!/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
|