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

Commit 9c54a10

Browse files
committed
moved converts into seperate file. corrected zone name converter to be simpler
1 parent 9381a70 commit 9c54a10

2 files changed

Lines changed: 152 additions & 124 deletions

File tree

cli4/cli4.py

Lines changed: 32 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -11,121 +11,12 @@
1111
except ImportError:
1212
yaml = None
1313

14+
import converters
15+
1416
sys.path.insert(0, os.path.abspath('..'))
1517
import CloudFlare
1618
import CloudFlare.exceptions
1719

18-
def convert_zones_to_identifier(cf, zone_name):
19-
"""zone names to numbers"""
20-
params = {'name':zone_name, 'per_page':1}
21-
try:
22-
zones = cf.zones.get(params=params)
23-
except CloudFlare.exceptions.CloudFlareAPIError as e:
24-
exit('cli4: %s - %d %s' % (zone_name, e, e))
25-
except Exception as e:
26-
exit('cli4: %s - %s' % (zone_name, e))
27-
28-
for zone in zones:
29-
if zone_name == zone['name']:
30-
return zone['id']
31-
32-
exit('cli4: %s - zone not found' % (zone_name))
33-
34-
def convert_dns_record_to_identifier(cf, zone_id, dns_name):
35-
"""dns record names to numbers"""
36-
# this can return an array of results as there can be more than one DNS entry for a name.
37-
params = {'name':dns_name}
38-
try:
39-
dns_records = cf.zones.dns_records.get(zone_id, params=params)
40-
except CloudFlare.exceptions.CloudFlareAPIError as e:
41-
exit('cli4: %s - %d %s' % (dns_name, e, e))
42-
except Exception as e:
43-
exit('cli4: %s - %s' % (dns_name, e))
44-
45-
r = []
46-
for dns_record in dns_records:
47-
if dns_name == dns_record['name']:
48-
r.append(dns_record['id'])
49-
if len(r) > 0:
50-
return r
51-
52-
exit('cli4: %s - dns name not found' % (dns_name))
53-
54-
def convert_certificates_to_identifier(cf, certificate_name):
55-
"""certificate names to numbers"""
56-
try:
57-
certificates = cf.certificates.get()
58-
except CloudFlare.exceptions.CloudFlareAPIError as e:
59-
exit('cli4: %s - %d %s' % (certificate_name, e, e))
60-
except Exception as e:
61-
exit('cli4: %s - %s' % (certificate_name, e))
62-
63-
for certificate in certificates:
64-
if certificate_name in certificate['hostnames']:
65-
return certificate['id']
66-
67-
exit('cli4: %s - no zone certificates found' % (certificate_name))
68-
69-
def convert_organizations_to_identifier(cf, organization_name):
70-
"""organizations names to numbers"""
71-
try:
72-
organizations = cf.user.organizations.get()
73-
except CloudFlare.exceptions.CloudFlareAPIError as e:
74-
exit('cli4: %s - %d %s' % (organization_name, e, e))
75-
except Exception as e:
76-
exit('cli4: %s - %s' % (organization_name, e))
77-
78-
for organization in organizations:
79-
if organization_name == organization['name']:
80-
return organization['id']
81-
82-
exit('cli4: %s - no organizations found' % (organization_name))
83-
84-
def convert_invites_to_identifier(cf, invite_name):
85-
"""invite names to numbers"""
86-
try:
87-
invites = cf.user.invites.get()
88-
except CloudFlare.exceptions.CloudFlareAPIError as e:
89-
exit('cli4: %s - %d %s' % (invite_name, e, e))
90-
except Exception as e:
91-
exit('cli4: %s - %s' % (invite_name, e))
92-
93-
for invite in invites:
94-
if invite_name == invite['organization_name']:
95-
return invite['id']
96-
97-
exit('cli4: %s - no invites found' % (invite_name))
98-
99-
def convert_virtual_dns_to_identifier(cf, virtual_dns_name):
100-
"""virtual dns names to numbers"""
101-
try:
102-
virtual_dnss = cf.user.virtual_dns.get()
103-
except CloudFlare.exceptions.CloudFlareAPIError as e:
104-
exit('cli4: %s - %d %s\n' % (virtual_dns_name, e, e))
105-
except Exception as e:
106-
exit('cli4: %s - %s\n' % (virtual_dns_name, e))
107-
108-
for virtual_dns in virtual_dnss:
109-
if virtual_dns_name == virtual_dns['name']:
110-
return virtual_dns['id']
111-
112-
exit('cli4: %s - no virtual_dns found' % (virtual_dns_name))
113-
114-
def convert_load_balancers_pool_to_identifier(cf, pool_name):
115-
"""load balancer pool names to numbers"""
116-
try:
117-
pools = cf.user.load_balancers.pools.get()
118-
except CloudFlare.exceptions.CloudFlareAPIError as e:
119-
exit('cli4: %s - %d %s' % (pool_name, e, e))
120-
except Exception as e:
121-
exit('cli4: %s - %s' % (pool_name, e))
122-
123-
for p in pools:
124-
if pool_name == p['description']:
125-
return p['id']
126-
127-
exit('cli4: %s - no pools found' % (pool_name))
128-
12920
def dump_commands(cf):
13021
"""dump a tree of all the known API commands"""
13122
w = cf.api_list()
@@ -282,19 +173,19 @@ def cli4(args):
282173
identifier1 = element
283174
elif cmd[0] == 'certificates':
284175
# identifier1 = convert_certificates_to_identifier(cf, element)
285-
identifier1 = convert_zones_to_identifier(cf, element)
176+
identifier1 = converters.convert_zones_to_identifier(cf, element)
286177
elif cmd[0] == 'zones':
287-
identifier1 = convert_zones_to_identifier(cf, element)
178+
identifier1 = converters.convert_zones_to_identifier(cf, element)
288179
elif cmd[0] == 'organizations':
289-
identifier1 = convert_organizations_to_identifier(cf, element)
180+
identifier1 = converters.convert_organizations_to_identifier(cf, element)
290181
elif (cmd[0] == 'user') and (cmd[1] == 'organizations'):
291-
identifier1 = convert_organizations_to_identifier(cf, element)
182+
identifier1 = converters.convert_organizations_to_identifier(cf, element)
292183
elif (cmd[0] == 'user') and (cmd[1] == 'invites'):
293-
identifier1 = convert_invites_to_identifier(cf, element)
184+
identifier1 = converters.convert_invites_to_identifier(cf, element)
294185
elif (cmd[0] == 'user') and (cmd[1] == 'virtual_dns'):
295-
identifier1 = convert_virtual_dns_to_identifier(cf, element)
186+
identifier1 = converters.convert_virtual_dns_to_identifier(cf, element)
296187
elif (cmd[0] == 'user') and (cmd[1] == 'load_balancers') and (cmd[2] == 'pools'):
297-
identifier1 = convert_load_balancers_pool_to_identifier(cf, element)
188+
identifier1 = converters.convert_load_balancers_pool_to_identifier(cf, element)
298189
else:
299190
exit("/%s/%s :NOT CODED YET 1" % ('/'.join(cmd), element))
300191
cmd.append(':' + identifier1)
@@ -303,7 +194,9 @@ def cli4(args):
303194
# raw identifier - lets just use it as-is
304195
identifier2 = element
305196
elif (cmd[0] and cmd[0] == 'zones') and (cmd[2] and cmd[2] == 'dns_records'):
306-
identifier2 = convert_dns_record_to_identifier(cf, identifier1, element)
197+
identifier2 = converters.convert_dns_record_to_identifier(cf,
198+
identifier1,
199+
element)
307200
else:
308201
exit("/%s/%s :NOT CODED YET 2" % ('/'.join(cmd), element))
309202
# identifier2 may be an array - this needs to be dealt with later
@@ -337,15 +230,30 @@ def cli4(args):
337230
for i2 in identifier2:
338231
try:
339232
if method is 'GET':
340-
r = m.get(identifier1=identifier1, identifier2=i2, identifier3=identifier3, params=params)
233+
r = m.get(identifier1=identifier1,
234+
identifier2=i2,
235+
identifier3=identifier3,
236+
params=params)
341237
elif method is 'PATCH':
342-
r = m.patch(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
238+
r = m.patch(identifier1=identifier1,
239+
identifier2=i2,
240+
identifier3=identifier3,
241+
data=params)
343242
elif method is 'POST':
344-
r = m.post(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
243+
r = m.post(identifier1=identifier1,
244+
identifier2=i2,
245+
identifier3=identifier3,
246+
data=params)
345247
elif method is 'PUT':
346-
r = m.put(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
248+
r = m.put(identifier1=identifier1,
249+
identifier2=i2,
250+
identifier3=identifier3,
251+
data=params)
347252
elif method is 'DELETE':
348-
r = m.delete(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
253+
r = m.delete(identifier1=identifier1,
254+
identifier2=i2,
255+
identifier3=identifier3,
256+
data=params)
349257
else:
350258
pass
351259
except CloudFlare.exceptions.CloudFlareAPIError as e:

cli4/converters.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
#!/usr/bin/env python
2+
"""Cloudflare API via command line"""
3+
4+
import os
5+
import sys
6+
7+
sys.path.insert(0, os.path.abspath('..'))
8+
import CloudFlare
9+
import CloudFlare.exceptions
10+
11+
def convert_zones_to_identifier(cf, zone_name):
12+
"""zone names to numbers"""
13+
params = {'name':zone_name, 'per_page':1}
14+
try:
15+
zones = cf.zones.get(params=params)
16+
except CloudFlare.exceptions.CloudFlareAPIError as e:
17+
exit('cli4: %s - %d %s' % (zone_name, e, e))
18+
except Exception as e:
19+
exit('cli4: %s - %s' % (zone_name, e))
20+
21+
if len(zones) == 1:
22+
return zones[0]['id']
23+
24+
exit('cli4: %s - zone not found' % (zone_name))
25+
26+
def convert_dns_record_to_identifier(cf, zone_id, dns_name):
27+
"""dns record names to numbers"""
28+
# this can return an array of results as there can be more than one DNS entry for a name.
29+
params = {'name':dns_name}
30+
try:
31+
dns_records = cf.zones.dns_records.get(zone_id, params=params)
32+
except CloudFlare.exceptions.CloudFlareAPIError as e:
33+
exit('cli4: %s - %d %s' % (dns_name, e, e))
34+
except Exception as e:
35+
exit('cli4: %s - %s' % (dns_name, e))
36+
37+
r = []
38+
for dns_record in dns_records:
39+
if dns_name == dns_record['name']:
40+
r.append(dns_record['id'])
41+
if len(r) > 0:
42+
return r
43+
44+
exit('cli4: %s - dns name not found' % (dns_name))
45+
46+
def convert_certificates_to_identifier(cf, certificate_name):
47+
"""certificate names to numbers"""
48+
try:
49+
certificates = cf.certificates.get()
50+
except CloudFlare.exceptions.CloudFlareAPIError as e:
51+
exit('cli4: %s - %d %s' % (certificate_name, e, e))
52+
except Exception as e:
53+
exit('cli4: %s - %s' % (certificate_name, e))
54+
55+
for certificate in certificates:
56+
if certificate_name in certificate['hostnames']:
57+
return certificate['id']
58+
59+
exit('cli4: %s - no zone certificates found' % (certificate_name))
60+
61+
def convert_organizations_to_identifier(cf, organization_name):
62+
"""organizations names to numbers"""
63+
try:
64+
organizations = cf.user.organizations.get()
65+
except CloudFlare.exceptions.CloudFlareAPIError as e:
66+
exit('cli4: %s - %d %s' % (organization_name, e, e))
67+
except Exception as e:
68+
exit('cli4: %s - %s' % (organization_name, e))
69+
70+
for organization in organizations:
71+
if organization_name == organization['name']:
72+
return organization['id']
73+
74+
exit('cli4: %s - no organizations found' % (organization_name))
75+
76+
def convert_invites_to_identifier(cf, invite_name):
77+
"""invite names to numbers"""
78+
try:
79+
invites = cf.user.invites.get()
80+
except CloudFlare.exceptions.CloudFlareAPIError as e:
81+
exit('cli4: %s - %d %s' % (invite_name, e, e))
82+
except Exception as e:
83+
exit('cli4: %s - %s' % (invite_name, e))
84+
85+
for invite in invites:
86+
if invite_name == invite['organization_name']:
87+
return invite['id']
88+
89+
exit('cli4: %s - no invites found' % (invite_name))
90+
91+
def convert_virtual_dns_to_identifier(cf, virtual_dns_name):
92+
"""virtual dns names to numbers"""
93+
try:
94+
virtual_dnss = cf.user.virtual_dns.get()
95+
except CloudFlare.exceptions.CloudFlareAPIError as e:
96+
exit('cli4: %s - %d %s\n' % (virtual_dns_name, e, e))
97+
except Exception as e:
98+
exit('cli4: %s - %s\n' % (virtual_dns_name, e))
99+
100+
for virtual_dns in virtual_dnss:
101+
if virtual_dns_name == virtual_dns['name']:
102+
return virtual_dns['id']
103+
104+
exit('cli4: %s - no virtual_dns found' % (virtual_dns_name))
105+
106+
def convert_load_balancers_pool_to_identifier(cf, pool_name):
107+
"""load balancer pool names to numbers"""
108+
try:
109+
pools = cf.user.load_balancers.pools.get()
110+
except CloudFlare.exceptions.CloudFlareAPIError as e:
111+
exit('cli4: %s - %d %s' % (pool_name, e, e))
112+
except Exception as e:
113+
exit('cli4: %s - %s' % (pool_name, e))
114+
115+
for p in pools:
116+
if pool_name == p['description']:
117+
return p['id']
118+
119+
exit('cli4: %s - no pools found' % (pool_name))
120+

0 commit comments

Comments
 (0)