commit a226ae4cd521d86f21716605cd4f1ca957f6e6bd Author: yova Date: Mon Aug 15 19:53:47 2022 +0200 initial diff --git a/dyndns-update.py b/dyndns-update.py new file mode 100755 index 0000000..c43c8a3 --- /dev/null +++ b/dyndns-update.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +## imports +import json +import ovh +import requests +import os, sys +import logging +import logging.handlers +from dotenv import load_dotenv + +my_logger = logging.getLogger('MyLogger') +my_logger.setLevel(logging.DEBUG) + +handler = logging.handlers.SysLogHandler(address = '/dev/log') +formatter = logging.Formatter("dyndns-update: %(message)s") +handler.setFormatter(formatter) + +my_logger.addHandler(handler) + + +env_path = os.path.abspath ( os.path.join ( os.curdir, os.path.relpath('.env') ) ) +load_dotenv(verbose=True, dotenv_path=env_path) + +## constants +client = ovh.Client( + endpoint=os.getenv('ENDPOINT'), # Endpoint of API OVH Europe (List of available endpoints) + application_key=os.getenv('APP_KEY'), # Application Key + application_secret=os.getenv('SECRET'), # Application Secret + consumer_key=os.getenv('CONSUMER_KEY'), # Consumer Key +) + +TMPFILE = '/tmp/lastIP' + +def get_ip(): + r = requests.get('http://ipinfo.io') + return (r.json()['ip']) + +def get_record_id(zone,subdomain): + result = client.get('/domain/zone/' + zone + '/record', fieldType='A', subDomain=subdomain ) +# print (json.dumps(result, indent=4)) + + return result[0] + +def set_record(zone, subdomain, ip): + id=get_record_id(zone,subdomain) + + result = client.put('/domain/zone/joefix.it/record/' + str(id), subDomain=subdomain, target=ip, ttl=60) + return result + + +if len(sys.argv) > 2: + if os.path.exists(TMPFILE): + with open(TMPFILE) as file: + try: + lastIP=file.read() + except: + my_logger.critical('error reading ' + TMPFILE) + else: + lastIP = '' + + currentIP = get_ip() + + if lastIP == currentIP: + my_logger.debug ('IP has not changed since last call') + exit() + + + if (set_record (sys.argv[1], sys.argv[2], currentIP) == None ): + my_logger.debug('IP of ' + sys.argv[2] + '.' + sys.argv[1] + ' successfully changed to ' + currentIP) + + with open(TMPFILE, 'w') as file: + file.write(currentIP) + +else: + print('Updates IP record of SUBDOMAIN in ZONE to current IP from ipinfo.io\n\nUsage:\n' + sys.argv[0] + ' ZONE SUBDOMAIN') diff --git a/env-example b/env-example new file mode 100644 index 0000000..a53ed4d --- /dev/null +++ b/env-example @@ -0,0 +1,5 @@ +ENDPOINT='ovh-eu' +APP_KEY='xxx' +SECRET='xxx' +CONSUMER_KEY='xxx' + diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..bc4969d --- /dev/null +++ b/readme.md @@ -0,0 +1,17 @@ +# Update DNS to current IP + +Simple dyndns for OVH API. + +Updates a A record to current IP. + +`dyndns-update zone subdomain` + + +Install as user cronjob like + +`*/5 * * * * /home/user/ovh-dyndns/dyndns-update.py` + +with + +`$ crontab -e` +