Private GIT

Skip to content
Snippets Groups Projects
Commit 753f56d2 authored by fmonthel's avatar fmonthel
Browse files

Merge branch 'master' of https://github.com/rmarchant/gandi-ddns

parents c2b68c42 d77857f8
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,6 @@ The config-template.txt file should be renamed to config.txt, and modified with
Every time the script runs, it will query an external service to retrieve the external IP of the machine, compare it to the current A record in the zone at gandi.net, and then update the record if the IP has changed.
Requirements:
- Python 2.7
- ipaddress module (pip install ipaddress)
- requests module (pip install requests)
- json module (pip install json)
......@@ -19,3 +18,12 @@ You can then run the script as a cron job :
```
*/15 * * * * python /home/user/gandi-ddns.py
```
macOS
```
cd gandi-ddns
ln -s $(pwd) /usr/local/gandi-ddns
sudo cp gandi.ddns.plist /Library/LaunchDaemons/
sudo launchctl /Library/LaunchDaemons/gandi.ddns.plist
```
import ConfigParser as configparser
import configparser as configparser
import sys
import os
import requests
import json
import ipaddress
from datetime import datetime
config_file = "config.txt"
......@@ -18,7 +19,7 @@ def get_ip():
print('Failed to retrieve external IP.')
sys.exit(2)
if r.status_code != 200:
print('Failed to retrieve external IP. Server responded with status_code: %d' % r.status_code)
print(('Failed to retrieve external IP. Server responded with status_code: %d' % r.status_code))
sys.exit(2)
ip = r.text.rstrip() # strip \n and any trailing whitespace
......@@ -45,8 +46,8 @@ def update_record(url, headers, payload):
#Add record
r = requests.put(url, headers=headers, json=payload)
if r.status_code != 201:
print('Record update failed with status code: %d' % r.status_code)
print(r.text)
print(('Record update failed with status code: %d' % r.status_code))
print((r.text))
sys.exit(2)
print ('Zone record updated.')
......@@ -62,6 +63,7 @@ def main():
sys.exit("Please fill in the 'config.txt' file.")
for section in config.sections():
print('%s - section %s' % (str(datetime.now()), section))
#Retrieve API key
apikey = config.get(section, 'apikey')
......@@ -74,7 +76,7 @@ def main():
print(url)
#Discover External IP
external_ip = get_ip()
print('External IP is: %s' % external_ip)
print(('External IP is: %s' % external_ip))
#Prepare record
payload = {'rrset_ttl': config.get(section, 'ttl'), 'rrset_values': [external_ip]}
......@@ -83,10 +85,10 @@ def main():
record = get_record(url, headers)
if record.status_code == 200:
print('Current record value is: %s' % json.loads(record.text)['rrset_values'][0])
print(('Current record value is: %s' % json.loads(record.text)['rrset_values'][0]))
if(json.loads(record.text)['rrset_values'][0] == external_ip):
print('No change in IP address. Goodbye.')
sys.exit()
continue
else:
print('No existing record. Adding...')
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>gandi.ddns</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/python3</string>
<string>gandi-ddns.py</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>300</integer> <!-- every 5 mins -->
<key>KeepAlive</key>
<false/>
<key>WorkingDirectory</key>
<string>/usr/local/gandi-ddns/</string>
<key>StandardErrorPath</key>
<string>/usr/local/var/log/gandi-ddns/output.log</string>
<key>StandardOutPath</key>
<string>/usr/local/var/log/gandi-ddns/output.log</string>
</dict>
</plist>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment