In [92]:
import os

apikey = os.environ['GANDI_API_KEY']
if not apikey:
    raise "api key NOT available"

In [8]:
import xmlrpc.client as rpc
#api = rpc.ServerProxy('https://rpc.gandi.net/xmlrpc/')
api = rpc.ServerProxy('https://rpc.ote.gandi.net/xmlrpc/')
version = api.version.info(apikey)

In [9]:
print(version)


{'api_version': '3.3.24'}

In [96]:
api.domain.list(apikey)


Out[96]:
[]

In [94]:
api.domain.available(apikey, ['bunting.io'])


Out[94]:
{'bunting.io': 'pending'}

In [18]:
api.contact.list(apikey)
api.contact.info(apikey)


Out[18]:
{'email': 'jared.bunting@peachjean.com',
 'bu': {'id': 3, 'name': 'Gandi US Inc'},
 'mail_obfuscated': 0,
 'country': 'US',
 'id': 79990,
 'type': 0,
 'given': 'Jared',
 'family': 'Bunting',
 'shippingaddress': {},
 'security_question_answer': '',
 'mobile': None,
 'is_corporate': False,
 'state': None,
 'handle': 'JB174-GANDI',
 'zip': '37214',
 'community': False,
 'fax': None,
 'city': 'Nashville',
 'vat_number': None,
 'data_obfuscated': 0,
 'lang': 'en',
 'security_question_num': 0,
 'newsletter': 0,
 'phone': '+1.6155090726',
 'validation': 'none',
 'third_part_resell': 0,
 'extra_parameters': {'birth_country': '',
  'birth_city': '',
  'birth_date': '',
  'birth_department': ''},
 'reachability': 'none',
 'streetaddr': '2913 Riverbend Drive'}

In [19]:
association_spec = {
  'domain': 'bunting.io',
  'owner': True,
  'admin': True
}
api.contact.can_associate_domain(apikey, "JB174-GANDI", association_spec)


Out[19]:
True

In [20]:
domain_spec = {
  'owner': "JB174-GANDI",
  'admin': "JB174-GANDI",
  'bill': "JB174-GANDI",
  'tech': "JB174-GANDI",
  'nameservers': ['a.dns.gandi-ote.net', 'b.dns.gandi-ote.net',
                  'c.dns.gandi-ote.net'],
  'duration': 1
}
op = api.domain.create(apikey, 'bunting.io', domain_spec)

In [93]:
op = api.operation.info(apikey, op['id'])
print(op)
print(op['step'])


{'last_error': None, 'type': 'domain_create', 'params': {'domain': 'bunting.io', 'owner': 'JB174-GANDI', 'tld_phase': 'golive', 'ns': ['a.dns.gandi-ote.net', 'b.dns.gandi-ote.net', 'c.dns.gandi-ote.net'], 'tld': 'io', 'tracker_id': 'b3b090df-197a-4c19-ba21-670218f43967', 'remote_addr': '99.5.88.198', 'tech': 'JB174-GANDI', 'duration': 1, 'admin': 'JB174-GANDI', 'accept_contract': True, 'auth_id': 80284, 'param_type': 'domain', 'bill': 'JB174-GANDI'}, 'id': 177519, 'source': 'JB174-GANDI', 'session_id': 80284, 'date_updated': <DateTime '20141231T16:27:10' at 7f799d1980f0>, 'step': 'BILL', 'eta': 0, 'infos': {'product_name': 'io', 'label': 'bunting.io', 'product_type': 'domain', 'product_action': 'create', 'id': '', 'quantity': '', 'extras': {}}, 'errortype': None, 'date_created': <DateTime '20141231T16:27:09' at 7f799d1ae5f8>, 'date_start': None}
BILL
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-93-bf9bfb120c6d> in <module>()
      2 print(op)
      3 print(op['step'])
----> 4 print(op['zone'])

KeyError: 'zone'

In [49]:
api.domain.zone.list(apikey)


Out[49]:
[{'version': 1,
  'name': 'Default Gandi zone file',
  'id': 115553,
  'date_updated': <DateTime '20110705T14:12:19' at 7f799d198f60>,
  'public': True},
 {'version': 1,
  'name': 'Default Gandi zone file',
  'id': 681838,
  'date_updated': <DateTime '20121030T16:31:53' at 7f799d1a2160>,
  'public': True},
 {'version': 1,
  'name': 'Default .fi zone file',
  'id': 681999,
  'date_updated': <DateTime '20130524T17:44:59' at 7f799d1a2278>,
  'public': True},
 {'version': 1,
  'name': 'Default .hu zone file',
  'id': 682000,
  'date_updated': <DateTime '20130524T17:44:59' at 7f799d1a2390>,
  'public': True},
 {'version': 1,
  'name': 'Default Gandi zone file (1)',
  'id': 682337,
  'date_updated': <DateTime '20141231T18:10:56' at 7f799d1a24a8>,
  'public': False}]

In [46]:
[ x for x in api.system.listMethods() if x.startswith("domain.zone") ]


Out[46]:
['domain.zone.clone',
 'domain.zone.count',
 'domain.zone.create',
 'domain.zone.delete',
 'domain.zone.info',
 'domain.zone.list',
 'domain.zone.record.add',
 'domain.zone.record.count',
 'domain.zone.record.delete',
 'domain.zone.record.list',
 'domain.zone.record.set',
 'domain.zone.record.update',
 'domain.zone.set',
 'domain.zone.update',
 'domain.zone.version.count',
 'domain.zone.version.delete',
 'domain.zone.version.list',
 'domain.zone.version.new',
 'domain.zone.version.set']

In [57]:
zone_id = 682337

In [76]:
api.domain.zone.info(apikey, zone_id)


Out[76]:
{'owner': 'JB174-GANDI',
 'versions': [1, 2],
 'version': 2,
 'name': 'test_zone_1',
 'id': 682337,
 'date_updated': <DateTime '20141231T18:26:09' at 7f799d1ab7f0>,
 'domains': 0,
 'public': False}

In [75]:
api.domain.zone.version.list(apikey, zone_id)


Out[75]:
[{'id': 1, 'date_created': <DateTime '20141231T18:10:56' at 7f799d1ab3c8>},
 {'id': 2, 'date_created': <DateTime '20141231T18:19:19' at 7f799d1ab470>}]

In [73]:
api.domain.zone.version.set(apikey, zone_id, 2)


Out[73]:
True

In [63]:
#api.system.methodHelp("domain.zone.record.list")
api.domain.zone.record.list(apikey, zone_id, 1)


Out[63]:
[{'id': 3597969,
  'type': 'A',
  'ttl': 10800,
  'name': '@',
  'value': '217.70.184.38'},
 {'id': 3597964,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'blog',
  'value': 'blogs.vip.gandi.net.'},
 {'id': 3597967,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'imap',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597963,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'pop',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597966,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'smtp',
  'value': 'relay.mail.gandi.net.'},
 {'id': 3597965,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'webmail',
  'value': 'agent.mail.gandi.net.'},
 {'id': 3597968,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'www',
  'value': 'webredir.vip.gandi.net.'},
 {'id': 3597971,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '50 fb.mail.gandi.net.'},
 {'id': 3597970,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '10 spool.mail.gandi.net.'}]

In [79]:
new_version = api.domain.zone.version.new(apikey, zone_id)

In [80]:
new_version


Out[80]:
3

In [67]:
api.domain.zone.record.list(apikey, zone_id, new_version)


Out[67]:
[{'id': 3597982,
  'type': 'A',
  'ttl': 10800,
  'name': '@',
  'value': '217.70.184.38'},
 {'id': 3597977,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'blog',
  'value': 'blogs.vip.gandi.net.'},
 {'id': 3597980,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'imap',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597976,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'pop',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597979,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'smtp',
  'value': 'relay.mail.gandi.net.'},
 {'id': 3597978,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'webmail',
  'value': 'agent.mail.gandi.net.'},
 {'id': 3597981,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'www',
  'value': 'webredir.vip.gandi.net.'},
 {'id': 3597984,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '50 fb.mail.gandi.net.'},
 {'id': 3597983,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '10 spool.mail.gandi.net.'},
 {'id': 3597989,
  'type': 'TXT',
  'ttl': 10800,
  'name': '@',
  'value': '"jared is testing things"'}]

In [82]:
api.domain.zone.record.add(apikey, zone_id, new_version, {'name': '@', 'type': 'TXT', 'ttl': 10800, 'value': 'jared is testing things ' + str(new_version)})


Out[82]:
{'id': 3598004,
 'type': 'TXT',
 'ttl': 10800,
 'name': '@',
 'value': '"jared is testing things 3"'}

In [84]:
api.domain.zone.version.set(apikey, zone_id, new_version)


Out[84]:
True

In [83]:
api.domain.zone.record.list(apikey, zone_id, new_version)


Out[83]:
[{'id': 3597996,
  'type': 'A',
  'ttl': 10800,
  'name': '@',
  'value': '217.70.184.38'},
 {'id': 3597991,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'blog',
  'value': 'blogs.vip.gandi.net.'},
 {'id': 3597994,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'imap',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597990,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'pop',
  'value': 'access.mail.gandi.net.'},
 {'id': 3597993,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'smtp',
  'value': 'relay.mail.gandi.net.'},
 {'id': 3597992,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'webmail',
  'value': 'agent.mail.gandi.net.'},
 {'id': 3597995,
  'type': 'CNAME',
  'ttl': 10800,
  'name': 'www',
  'value': 'webredir.vip.gandi.net.'},
 {'id': 3597998,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '50 fb.mail.gandi.net.'},
 {'id': 3597997,
  'type': 'MX',
  'ttl': 10800,
  'name': '@',
  'value': '10 spool.mail.gandi.net.'},
 {'id': 3598004,
  'type': 'TXT',
  'ttl': 10800,
  'name': '@',
  'value': '"jared is testing things 3"'},
 {'id': 3598003,
  'type': 'TXT',
  'ttl': 10800,
  'name': '@',
  'value': '"jared is testing things"'}]

In [85]:
api.domain.zone.create(apikey, {'name': 'jtest2'})


Out[85]:
{'owner': 'JB174-GANDI',
 'versions': [1],
 'version': 1,
 'name': 'jtest2',
 'id': 682338,
 'date_updated': <DateTime '20141231T18:43:46' at 7f79a405e240>,
 'domains': 0,
 'public': False}

In [87]:
zone_id2 = 682338

In [88]:
api.domain.zone.version.list(apikey, zone_id2)


Out[88]:
[{'id': 1, 'date_created': <DateTime '20141231T18:43:46' at 7f79a405e198>}]

In [91]:
api.domain.zone.record.list(apikey, zone_id2, 1)


Out[91]:
[]

In [ ]: