Compare commits

..

5 commits

Author SHA1 Message Date
Gitouche 3832ec2709 Update ifconfig.co example endpoint 2021-10-27 22:32:13 +02:00
Gitouche cd1def40e1 manage multiple domains 2021-01-09 16:02:14 +01:00
Guigui Benmaurice 8c1ae5abdd Update to python3 2019-12-28 22:01:48 +01:00
cave bcae18b8e8
Merge pull request #13 from cavebeat/minus-beta
remove beta
2018-03-19 20:39:11 +01:00
cave 5e3ff0d3a6
remove beta
remove beta from api endpoint
2018-03-19 20:38:32 +01:00
2 changed files with 34 additions and 38 deletions

View file

@ -36,7 +36,7 @@ run your own external IP provider:
+ <?php $ip = $_SERVER['REMOTE_ADDR']; ?> + <?php $ip = $_SERVER['REMOTE_ADDR']; ?>
<?php print $ip; ?> <?php print $ip; ?>
e.g. e.g.
+ https://ifconfig.co/ip + https://ifconfig.co
+ http://ifconfig.me/ip + http://ifconfig.me/ip
+ http://whatismyip.akamai.com/ + http://whatismyip.akamai.com/
+ http://ipinfo.io/ip + http://ipinfo.io/ip

View file

@ -9,7 +9,7 @@ https://www.gnu.org/licenses/gpl-3.0.html
Created on 13 Aug 2017 Created on 13 Aug 2017
http://doc.livedns.gandi.net/ http://doc.livedns.gandi.net/
http://doc.livedns.gandi.net/#api-endpoint -> https://dns.beta.gandi.net/api/v5/ http://doc.livedns.gandi.net/#api-endpoint -> https://dns.gandi.net/api/v5/
''' '''
import requests, json import requests, json
@ -22,8 +22,8 @@ def get_dynip(ifconfig_provider):
similar to curl ifconfig.me/ip, see example.config.py for details to ifconfig providers similar to curl ifconfig.me/ip, see example.config.py for details to ifconfig providers
''' '''
r = requests.get(ifconfig_provider) r = requests.get(ifconfig_provider)
print 'Checking dynamic IP: ' , r._content.strip('\n') print('Checking dynamic IP: ' , r.text.strip('\n'))
return r.content.strip('\n') return r.text.strip('\n')
def get_uuid(): def get_uuid():
''' '''
@ -38,8 +38,8 @@ def get_uuid():
if u.status_code == 200: if u.status_code == 200:
return json_object['zone_uuid'] return json_object['zone_uuid']
else: else:
print 'Error: HTTP Status Code ', u.status_code, 'when trying to get Zone UUID' print('Error: HTTP Status Code ', u.status_code, 'when trying to get Zone UUID')
print json_object['message'] print(json_object['message'])
exit() exit()
def get_dnsip(uuid): def get_dnsip(uuid):
@ -56,11 +56,11 @@ def get_dnsip(uuid):
u = requests.get(url, headers=headers) u = requests.get(url, headers=headers)
if u.status_code == 200: if u.status_code == 200:
json_object = json.loads(u._content) json_object = json.loads(u._content)
print 'Checking IP from DNS Record' , config.subdomains[0], ':', json_object['rrset_values'][0].encode('ascii','ignore').strip('\n') print('Checking IP from DNS Record' , config.subdomains[0], ':', json_object['rrset_values'][0].encode('ascii','ignore').decode().strip('\n'))
return json_object['rrset_values'][0].encode('ascii','ignore').strip('\n') return json_object['rrset_values'][0].encode('ascii','ignore').decode().strip('\n')
else: else:
print 'Error: HTTP Status Code ', u.status_code, 'when trying to get IP from subdomain', config.subdomains[0] print('Error: HTTP Status Code ', u.status_code, 'when trying to get IP from subdomain', config.subdomains[0])
print json_object['message'] print (json_object['message'])
exit() exit()
def update_records(uuid, dynIP, subdomain): def update_records(uuid, dynIP, subdomain):
@ -71,7 +71,7 @@ def update_records(uuid, dynIP, subdomain):
-H 'X-Api-Key: XXX' \ -H 'X-Api-Key: XXX' \
-d '{"rrset_ttl": 10800, -d '{"rrset_ttl": 10800,
"rrset_values": ["<VALUE>"]}' \ "rrset_values": ["<VALUE>"]}' \
https://dns.beta.gandi.net/api/v5/zones/<UUID>/records/<NAME>/<TYPE> https://dns.gandi.net/api/v5/zones/<UUID>/records/<NAME>/<TYPE>
''' '''
url = config.api_endpoint+ '/zones/' + uuid + '/records/' + subdomain + '/A' url = config.api_endpoint+ '/zones/' + uuid + '/records/' + subdomain + '/A'
payload = {"rrset_ttl": config.ttl, "rrset_values": [dynIP]} payload = {"rrset_ttl": config.ttl, "rrset_values": [dynIP]}
@ -80,11 +80,11 @@ def update_records(uuid, dynIP, subdomain):
json_object = json.loads(u._content) json_object = json.loads(u._content)
if u.status_code == 201: if u.status_code == 201:
print 'Status Code:', u.status_code, ',', json_object['message'], ', IP updated for', subdomain print('Status Code:', u.status_code, ',', json_object['message'], ', IP updated for', subdomain)
return True return True
else: else:
print 'Error: HTTP Status Code ', u.status_code, 'when trying to update IP from subdomain', subdomain print('Error: HTTP Status Code ', u.status_code, 'when trying to update IP from subdomain', subdomain)
print json_object['message'] print(json_object['message'])
exit() exit()
@ -92,39 +92,35 @@ def update_records(uuid, dynIP, subdomain):
def main(force_update, verbosity): def main(force_update, verbosity):
if verbosity: if verbosity:
print "verbosity turned on - not implemented by now" print("verbosity turned on - not implemented by now")
for key, value in config.dnsentries.items():
#get zone ID from Account config.domain = key
uuid = get_uuid() config.subdomains = value
#get zone ID from Account
uuid = get_uuid()
#compare dynIP and DNS IP #compare dynIP and DNS IP
dynIP = get_dynip(config.ifconfig) dynIP = get_dynip(config.ifconfig)
dnsIP = get_dnsip(uuid) dnsIP = get_dnsip(uuid)
if force_update: if force_update:
print "Going to update/create the DNS Records for the subdomains" print("Going to update/create the DNS Records for the subdomains")
for sub in config.subdomains:
update_records(uuid, dynIP, sub)
else:
if dynIP == dnsIP:
print "IP Address Match - no further action"
else:
print "IP Address Mismatch - going to update the DNS Records for the subdomains with new IP", dynIP
for sub in config.subdomains: for sub in config.subdomains:
update_records(uuid, dynIP, sub) update_records(uuid, dynIP, sub)
else:
if dynIP == dnsIP:
print("IP Address Match - no further action")
else:
print("IP Address Mismatch - going to update the DNS Records for the subdomains with new IP", dynIP)
for sub in config.subdomains:
update_records(uuid, dynIP, sub)
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', help="increase output verbosity", action="store_true") parser.add_argument('-v', '--verbose', help="increase output verbosity", action="store_true")
parser.add_argument('-f', '--force', help="force an update/create", action="store_true") parser.add_argument('-f', '--force', help="force an update/create", action="store_true")
args = parser.parse_args() args = parser.parse_args()
main(args.force, args.verbose) main(args.force, args.verbose)