diff --git a/update-record.py b/update-record.py index 89ec598..73abf0f 100755 --- a/update-record.py +++ b/update-record.py @@ -9,6 +9,15 @@ import argparse +def errorCheck(ret): + if (ret['code'] != 1000): + raise RuntimeError('[ERROR] Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) + # end if + + return ret +# end errorCheck + + def main(args): verbose = args.verbose domain = args.domain @@ -33,63 +42,56 @@ debug_mode = True api_url = ApiClient.API_OTE_URL api_client = ApiClient(api_url=api_url, debug_mode=debug_mode) - ret = api_client.login(username, password) - if (ret['code'] != 1000): - raise RuntimeError('Api login error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) + ret = errorCheck(api_client.login(username, password)) if (verbose): - print("login: ", ret) + print("login:", ret) # check domain - ret = api_client.call_api(api_method='nameserver.list', method_params={'domain': domain}) + ret = errorCheck(api_client.call_api(api_method='nameserver.list', method_params={'domain': domain})) if (verbose): - print('list: ', ret) - if (ret['code'] != 1000): - raise RuntimeError('Api call error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) + print('list:', ret) if (ret['resData']['count'] == 0): raise RuntimeError("You are not user of this domain.") # looking if subdomain exists - subId = -1 - ret = api_client.call_api(api_method='nameserver.info', method_params={'domain': domain}) - if (ret['code'] != 1000): - raise RuntimeError('Api call error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) + ret = errorCheck(api_client.call_api(api_method='nameserver.info', method_params={'domain': domain})) records = ret['resData']['record'] - for r in records: - if (r['name'] == args.domain and r['type'] == args.record_type): - subId = r['id'] - if (verbose): - print(r) - break - # end if - # end for + content = str(args.content) + if (args.delete or args.update): + recordFound = False + for r in records: + if (r['name'] == args.domain and r['type'] == args.record_type): + recordFound = True + if (verbose): + print('entry:', r) - if (args.delete): - if (subId >= 0): - if (verbose): - print ("delete id: ", subId) - ret = api_client.call_api(api_method='nameserver.deleteRecord', method_params={'id': subId}) - if (ret['code'] != 1000): - raise RuntimeError('Api call error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) - else: - ret = None - # end if + # delete entry + if (args.delete): + # if content is not none: delete only entry with given content. + if (args.content != None and r['content'] != content): + continue + + ret = errorCheck(api_client.call_api(api_method='nameserver.deleteRecord', method_params={'id': r['id']})) + if (verbose): + print('delete:', ret) + # update entry + elif (args.update): + ret = errorCheck(api_client.call_api(api_method='nameserver.updateRecord', method_params={'id': r['id'], 'type': args.record_type, 'content': content, 'ttl': args.ttl})) + if (verbose): + print('update:', ret) + # end if + # end if + # end for + + if (not recordFound): + raise RuntimeError('No entry available for updating or deleting.') else: - if (not args.update or subId < 0): - ret = api_client.call_api(api_method='nameserver.createRecord', method_params={'domain': domain, 'name': sub, 'type': args.record_type, 'content': str(args.content), 'ttl': args.ttl}) - if (ret['code'] != 1000): - raise RuntimeError('Api call error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) - if (verbose): - print('create: ', ret) - else: - ret = api_client.call_api(api_method='nameserver.updateRecord', method_params={'id': subId, 'type': args.record_type, 'content': str(args.content), 'ttl': args.ttl}) - if (ret['code'] != 1000): - raise RuntimeError('Api call error. Code: ' + str(ret['code']) + ' Message: ' + ret['msg']) - if (verbose): - print('update: ', ret) - # end if + ret = errorCheck(api_client.call_api(api_method='nameserver.createRecord', method_params={'domain': domain, 'name': sub, 'type': args.record_type, 'content': content, 'ttl': args.ttl})) + if (verbose): + print('create:', ret) # end if api_client.logout() @@ -101,15 +103,14 @@ parser = argparse.ArgumentParser(description='inwx subdomain update') parser.add_argument('domain', metavar='domain', help='full domain like subdomain.example.com') - parser.add_argument('content', metavar='content', nargs='?', default=None, help='ip or string to fill into sub domain entry') + parser.add_argument('content', metavar='content', nargs='?', default=None, help='ip or string to fill/update into subdomain domain entry') parser.add_argument('-r', '--record-type', metavar='type', required=True, choices=['A', 'AAAA', 'TXT', 'CNAME', 'TLSA'], help='record type (A, AAAA, TXT, CNAME, TLSA)') - parser.add_argument('--delete', action='store_true', required=False, help='delete existing record') - parser.add_argument('-u', '--update', action='store_true', required=False, help='update existing record if it exists') + parser.add_argument('--delete', action='store_true', required=False, help='delete existing record with given content, or delete all records if no content is given') + parser.add_argument('-u', '--update', action='store_true', required=False, help='update all existing records if one exists, otherwise fails') parser.add_argument('-c', '--config_file', metavar='path', default='./conf.cfg', help='path to configuration file') parser.add_argument('-t', '--ttl', default=3600, type=int, help='TTL (time to live) of the nameserver record in seconds (default 3600)') parser.add_argument('-s', '--config_section', metavar='section', default='live', choices=['live', 'ote'], help='configuration section (live, ote) default: live') - parser.add_argument('-l', '--language', metavar='lang', default='en', choices=['de', 'en'], help='answer language (de, en)') parser.add_argument('-v', '--verbose', action='store_true', help='verbose') parser.add_argument('-d', '--debug', action='store_true', help='debug')