Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.

Commit 3225f64

Browse files
committed
Cleanup of code and confirmed functionality with A/AAAA records present
1 parent ca88ab7 commit 3225f64

1 file changed

Lines changed: 58 additions & 48 deletions

File tree

examples/example-update-dynamic-dns.py

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,44 +29,14 @@ def my_ip_address():
2929

3030
return ip_address, ip_address_type
3131

32-
def main():
33-
try:
34-
dns_name = sys.argv[1]
35-
except:
36-
exit('usage: example-update-dynamic-dns.py fqdn-hostname')
37-
38-
host_name, zone_name = dns_name.split('.', 1)
39-
40-
ip_address, ip_address_type = my_ip_address()
41-
42-
print 'MY IP: %s %s' % (dns_name, ip_address)
43-
44-
cf = CloudFlare.CloudFlare()
45-
46-
# grab the zone identifier
47-
try:
48-
params = {'name':zone_name}
49-
zones = cf.zones.get(params=params)
50-
except CloudFlare.CloudFlareAPIError as e:
51-
exit('/zones %d %s - api call failed' % (e, e))
52-
except Exception as e:
53-
exit('/zones.get - %s - api call failed' % (e))
54-
55-
if len(zones) != 1:
56-
exit('/zones.get - %s - api call returned %d items' % (zone_name, len(zones)))
57-
58-
zone = zones[0]
59-
60-
zone_name = zone['name']
61-
zone_id = zone['id']
62-
32+
def do_dns_update(cf, zone_name, zone_id, dns_name, ip_address, ip_address_type):
6333
try:
6434
params = {'name':dns_name,'match':'all','type':ip_address_type}
6535
dns_records = cf.zones.dns_records.get(zone_id, params=params)
6636
except CloudFlare.CloudFlareAPIError as e:
6737
exit('/zones/dns_records %s - %d %s - api call failed' % (dns_name, e, e))
6838

69-
did_update = False
39+
updated = False
7040

7141
# update the record - unless it's already correct
7242
for dns_record in dns_records:
@@ -79,16 +49,18 @@ def main():
7949

8050
if ip_address_type != old_ip_address_type:
8151
# only update the correct address type (A or AAAA)
52+
# we don't see this becuase of the search params above
8253
print 'IGNORED: %s %s ; wrong address family' % (dns_name, old_ip_address)
8354
continue
8455

8556
if ip_address == old_ip_address:
8657
print 'UNCHANGED: %s %s' % (dns_name, ip_address)
87-
did_update = True
58+
updated = True
8859
continue
8960

61+
# Yes, we need to update this record - we know it's the same address type
62+
9063
dns_record_id = dns_record['id']
91-
# update this record - we know it's the same address type
9264
dns_record = {
9365
'name':dns_name,
9466
'type':ip_address_type,
@@ -99,21 +71,59 @@ def main():
9971
except CloudFlare.CloudFlareAPIError as e:
10072
exit('/zones.dns_records.put %s - %d %s - api call failed' % (dns_name, e, e))
10173
print 'UPDATED: %s %s -> %s' % (dns_name, old_ip_address, ip_address)
102-
did_update = True
74+
updated = True
10375

104-
if did_update == False:
105-
# nothing found - so create record
106-
dns_record = {
107-
'name':host_name,
108-
'type':ip_address_type,
109-
'content':ip_address
110-
}
111-
try:
112-
dns_record = cf.zones.dns_records.post(zone_id, data=dns_record)
113-
except CloudFlare.CloudFlareAPIError as e:
114-
exit('/zones.dns_records.post %s - %d %s - api call failed' % (dns_name, e, e))
115-
print 'CREATED: %s %s' % (dns_name, ip_address)
116-
exit(0)
76+
if updated:
77+
return
78+
79+
# no exsiting dns record to update - so create dns record
80+
dns_record = {
81+
'name':dns_name,
82+
'type':ip_address_type,
83+
'content':ip_address
84+
}
85+
try:
86+
dns_record = cf.zones.dns_records.post(zone_id, data=dns_record)
87+
except CloudFlare.CloudFlareAPIError as e:
88+
exit('/zones.dns_records.post %s - %d %s - api call failed' % (dns_name, e, e))
89+
print 'CREATED: %s %s' % (dns_name, ip_address)
90+
91+
def main():
92+
try:
93+
dns_name = sys.argv[1]
94+
except:
95+
exit('usage: example-update-dynamic-dns.py fqdn-hostname')
96+
97+
host_name, zone_name = dns_name.split('.', 1)
98+
99+
ip_address, ip_address_type = my_ip_address()
100+
101+
print 'MY IP: %s %s' % (dns_name, ip_address)
102+
103+
cf = CloudFlare.CloudFlare()
104+
105+
# grab the zone identifier
106+
try:
107+
params = {'name':zone_name}
108+
zones = cf.zones.get(params=params)
109+
except CloudFlare.CloudFlareAPIError as e:
110+
exit('/zones %d %s - api call failed' % (e, e))
111+
except Exception as e:
112+
exit('/zones.get - %s - api call failed' % (e))
113+
114+
if len(zones) == 0:
115+
exit('/zones.get - %s - zone not found' % (zone_name))
116+
117+
if len(zones) != 1:
118+
exit('/zones.get - %s - api call returned %d items' % (zone_name, len(zones)))
119+
120+
zone = zones[0]
121+
122+
zone_name = zone['name']
123+
zone_id = zone['id']
124+
125+
do_dns_update(cf, zone_name, zone_id, dns_name, ip_address, ip_address_type)
126+
exit(0)
117127

118128
if __name__ == '__main__':
119129
main()

0 commit comments

Comments
 (0)