diff --git a/update-record.py b/update-record.py new file mode 100755 index 0000000..0c57254 --- /dev/null +++ b/update-record.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- encoding: UTF8 -*- + +# author: Pascal Gollor (https://gitbucket.pgollor.de) +# author: InterNetworX, info →AT→ inwx.de + +############################################################################# +###### This is an example of how to use the inwx class ####### + +from inwx.inwx import domrobot, prettyprint +from inwx.configuration import get_account_data +import sys +import argparse + + +def main(args): + verbose = args.verbose + domain = args.domain + + # split domain + h = domain.split('.') + if (len(h) != 3): + raise ValueError("invalid subdomain") + # end if + sub = h[0] + domain = h[1] + '.' + h[2] + + if (args.debug): + print(args) + # end if + + api_url, username, password, shared_secret = get_account_data(True, config_file=args.config_file, config_section=args.config_section) + inwx_conn = domrobot(api_url, False) + ret = inwx_conn.account.login({'lang': args.language, 'user': username, 'pass': password}) + if (verbose): + print("login: " + str(ret)) + # end if + + + # check domain + ret = inwx_conn.nameserver.list({'domain': domain}) + if (verbose): + print('list: ' + str(ret)) + # end if + if (ret['resData']['count'] == 0): + raise RuntimeError("You are not user of this domain.") + # end if + + + # looking if subdomain exists + subId = -1 + ret = inwx_conn.nameserver.info({'domain': domain}) + records = ret['resData']['record'] + + for r in records: + if (r['name'] == args.domain): + subId = r['id'] + if (verbose): + print(r) + # end if + break + # end if + # end for + + if (verbose): + print('subdomain id: ' + str(subId)) + # end if + + if (subId < 0): + ret = inwx_conn.nameserver.createRecord({'domain': domain, 'name': sub, 'type': args.record_type,'content': str(args.content), 'ttl': args.ttl}) + else: + ret = inwx_conn.nameserver.updateRecord({'id': subId, 'type': args.record_type, 'content': str(args.content), 'ttl': args.ttl}) + # end if + + if (verbose): + print('update/create: ' + str(ret)) + # end if + +# end main + + +if __name__ == '__main__': + 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', help='ip or string to fill into sub domain entry') + parser.add_argument('-r', '--record-type', metavar='type', required=True, choices=['A', 'AAAA', 'TXT', 'CNAME'], help='record type (A, AAAA, TXT, CNAME)') + + 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='ote', choices=['live', 'ote'], help='configuration section (live, ote)') + 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') + + args = parser.parse_args() + + if (args.debug): + main(args) + else: + try: + main(args) + except NameError as e: + print(e.args[0]) + # end try + # end if + +# end if +