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

Commit ec9fef2

Browse files
committed
Provided support for dns names to return more than one item. Allowed more complex json/yaml results
1 parent e9cf6aa commit ec9fef2

File tree

1 file changed

+52
-46
lines changed

1 file changed

+52
-46
lines changed

cli4/cli4.py

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -23,29 +23,29 @@ def convert_zones_to_identifier(cf, zone_name):
2323
exit('cli4: %s - %s' % (zone_name, e))
2424

2525
for zone in zones:
26-
name = zone['name']
27-
if zone_name == name:
28-
zone_id = zone['id']
29-
return zone_id
26+
if zone_name == zone['name']:
27+
return zone['id']
3028

3129
exit('cli4: %s - zone not found' % (zone_name))
3230

3331
def convert_dns_record_to_identifier(cf, zone_id, dns_name):
34-
params = {'name':dns_name,'per_page':1}
32+
# this can return an array of results as there can be more than one DNS entry for a name.
33+
params = {'name':dns_name}
3534
try:
3635
dns_records = cf.zones.dns_records.get(zone_id, params=params)
3736
except CloudFlare.CloudFlareAPIError as e:
3837
exit('cli4: %s - %d %s' % (dns_name, e, e))
3938
except Exception as e:
4039
exit('cli4: %s - %s' % (dns_name, e))
4140

41+
r = []
4242
for dns_record in dns_records:
43-
name = dns_record['name']
44-
if dns_name == name:
45-
dns_id = dns_record['id']
46-
return dns_id
43+
if dns_name == dns_record['name']:
44+
r.append(dns_record['id'])
45+
if len(r) > 0:
46+
return r
4747

48-
exit('cli4: %s - dns_name not found' % (dns_name))
48+
exit('cli4: %s - dns name not found' % (dns_name))
4949

5050
def convert_certificates_to_identifier(cf, certificate_name):
5151
try:
@@ -56,10 +56,8 @@ def convert_certificates_to_identifier(cf, certificate_name):
5656
exit('cli4: %s - %s' % (certificate_name, e))
5757

5858
for certificate in certificates:
59-
hostnames = certificate['hostnames']
60-
if certificate_name in hostnames:
61-
certificate_id = certificate['id']
62-
return certificate_id
59+
if certificate_name in certificate['hostnames']:
60+
return certificate['id']
6361

6462
exit('cli4: %s - no zone certificates found' % (certificate_name))
6563

@@ -72,10 +70,8 @@ def convert_organizations_to_identifier(cf, organization_name):
7270
exit('cli4: %s - %s' % (organization_name, e))
7371

7472
for organization in organizations:
75-
name = organization['name']
76-
if organization_name == name :
77-
organization_id = organization['id']
78-
return organization_id
73+
if organization_name == organization['name']:
74+
return organization['id']
7975

8076
exit('cli4: %s - no organizations found' % (organization_name))
8177

@@ -88,10 +84,8 @@ def convert_invites_to_identifier(cf, invite_name):
8884
exit('cli4: %s - %s' % (invite_name, e))
8985

9086
for invite in invites:
91-
name = invite['organization_name']
92-
if invite_name == name :
93-
invite_id = invite['id']
94-
return invite_id
87+
if invite_name == invite['organization_name']:
88+
return invite['id']
9589

9690
exit('cli4: %s - no invites found' % (invite_name))
9791

@@ -104,10 +98,8 @@ def convert_virtual_dns_to_identifier(cf, virtual_dns_name):
10498
exit('cli4: %s - %s\n' % (virtual_dns_name, e))
10599

106100
for virtual_dns in virtual_dnss:
107-
name = virtual_dns['name']
108-
if virtual_dns_name == name :
109-
virtual_dns_id = virtual_dns['id']
110-
return virtual_dns_id
101+
if virtual_dns_name == virtual_dns['name']:
102+
return virtual_dns['id']
111103

112104
exit('cli4: %s - no virtual_dns found' % (virtual_dns_name))
113105

@@ -219,7 +211,12 @@ def cli4(args):
219211
identifier2 = convert_dns_record_to_identifier(cf, identifier1, element)
220212
else:
221213
exit("/%s/%s :NOT CODED YET 2" % ('/'.join(cmd), element))
222-
cmd.append(':' + identifier2)
214+
# identifier2 may be an array - this needs to be dealt with later
215+
if isinstance(identifier2, list):
216+
cmd.append(':' + '[' + ','.join(identifier2) + ']')
217+
else:
218+
cmd.append(':' + identifier2)
219+
identifier2 = [identifier2]
223220
else:
224221
try:
225222
m = getattr(m, element)
@@ -230,26 +227,35 @@ def cli4(args):
230227
else:
231228
exit('cli4: /%s/%s - not found' % ('/'.join(cmd), element))
232229

233-
try:
234-
if method is 'GET':
235-
r = m.get(identifier1 = identifier1, identifier2 = identifier2, params = params)
236-
elif method is 'PATCH':
237-
r = m.patch(identifier1 = identifier1, identifier2 = identifier2, data = params)
238-
elif method is 'POST':
239-
r = m.post(identifier1 = identifier1, identifier2 = identifier2, data = params)
240-
elif method is 'PUT':
241-
r = m.put(identifier1 = identifier1, identifier2 = identifier2, data = params)
242-
elif method is 'DELETE':
243-
r = m.delete(identifier1 = identifier1, identifier2 = identifier2, data = params)
244-
else:
245-
pass
246-
except CloudFlare.CloudFlareAPIError as e:
247-
exit('cli4: /%s - %d %s' % (command, e, e))
248-
except Exception as e:
249-
exit('cli4: /%s - %s - api error' % (command, e))
230+
results = []
231+
for i2 in identifier2:
232+
print 'RUNNING:', '/' + '/'.join(cmd), '-', i2
233+
234+
try:
235+
if method is 'GET':
236+
r = m.get(identifier1 = identifier1, identifier2 = i2, params = params)
237+
elif method is 'PATCH':
238+
r = m.patch(identifier1 = identifier1, identifier2 = i2, data = params)
239+
elif method is 'POST':
240+
r = m.post(identifier1 = identifier1, identifier2 = i2, data = params)
241+
elif method is 'PUT':
242+
r = m.put(identifier1 = identifier1, identifier2 = i2, data = params)
243+
elif method is 'DELETE':
244+
r = m.delete(identifier1 = identifier1, identifier2 = i2, data = params)
245+
else:
246+
pass
247+
except CloudFlare.CloudFlareAPIError as e:
248+
exit('cli4: /%s - %d %s' % (command, e, e))
249+
except Exception as e:
250+
exit('cli4: /%s - %s - api error' % (command, e))
251+
252+
results.append(r)
253+
254+
if len(results) == 1:
255+
results = results[0]
250256

251257
if output == 'json':
252-
print json.dumps(r, indent=4, sort_keys=True)
258+
print json.dumps(results, indent=4, sort_keys=True)
253259
if output == 'yaml' and yaml is not None:
254-
print yaml.dump(r)
260+
print yaml.safe_dump(results)
255261

0 commit comments

Comments
 (0)