/gandyn

Gandi domain updater script for dynamic IP addresses.

Primary LanguagePython

Disclaimer

This project is no longer maintained. You should now use Danamir's dyn-gandi as it supports new Gandi API.

To contributors : Sincere thanks for your pertinent Pull Requests and Issues reports during the last 6 years. <3

Gandyn

Your server has a dynamic IP address and you use Gandi as domain name server? Then Gandyn is for you!

This is an unsecure script based on Comète's work. It uses Gandi XML-RPC service to update your DNS record. Server public IP address is retrieved from http://ifconfig.me.

As this is my first python "project", code might not be very pythonic. So, feel free to improve it :)

Prequisites

First of all you have to enable XML-RPC interface for your domain on Gandi web interface. Gandi will then give you an API key. Copy paste it to your gandyn config file.

Installation

Archlinux users:

There is a 'gandyn-git' package in AUR.

Others:

The python standard way works.

$ wget -O gandyn.tar.gz https://github.com/Chralu/gandyn/tarball/<version>
$ tar xvzf gandyn.tar.gz
$ cd gandyn/src/
# python setup.py install

If you encounter issues with the xmlrpc.client missing module, you may try to install with Python 3.3 (or any other version 3 of python you may have)

$ python3.3 setup.py install

Execution

Add execute permission to gandyn.py

chmod +x /usr/local/bin/gandyn.py

Gandyn gets its configuration from a simple python file. Config file syntax is described later. To run Gandyn, use the command :

gandyn.py --config <path to the config file>

To get Gandyn run every 5 minutes, add the following line to your crontab.

*/5 * * * * /usr/local/bin/gandyn.py --config <path to the config file>

Configuration

Configuration file is a simple python script that defines global constants.

This is unsecure, so it is important that nobody can change the config file content.

Here is a basic config file with default values:

#API key generated by Gandi
API_KEY = '' 

#Name of the domain to update
DOMAIN_NAME = 'mydomain.net'

#Time to live of the updated record
TTL = 300

#Filters used to find the record to update.
#By default, the updated record is "@   A   xxx.xxx.xxx.xxx"
#Where 'xxx.xxx.xxx.xxx' is the updated value
RECORD = {'type':'A', 'name':'@'}

#Log level of the script. Values are :
#   logging.DEBUG
#   logging.INFO
#   logging.WARNING
#   logging.ERROR
#   logging.CRITICAL
LOG_LEVEL = logging.DEBUG

#Path of the log file
LOG_FILE = 'gandyn.log'