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
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 :)
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.
There is a 'gandyn-git' package in AUR.
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
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 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'