Unify handling of API list returns

Ensure that every API return is handled appropriately as it is a list
now.
This commit is contained in:
Joshua Boniface 2020-12-02 19:15:33 -05:00
parent 0820cb3c5b
commit 1d5b9c33b5
5 changed files with 135 additions and 18 deletions

View File

@ -164,6 +164,15 @@ def ceph_osd_info(config, osd):
response = call_api(config, 'get', '/storage/ceph/osd/{osd}'.format(osd=osd)) response = call_api(config, 'get', '/storage/ceph/osd/{osd}'.format(osd=osd))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "OSD not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -552,6 +561,15 @@ def ceph_pool_info(config, pool):
response = call_api(config, 'get', '/storage/ceph/pool/{pool}'.format(pool=pool)) response = call_api(config, 'get', '/storage/ceph/pool/{pool}'.format(pool=pool))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Pool not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -829,6 +847,15 @@ def ceph_volume_info(config, pool, volume):
response = call_api(config, 'get', '/storage/ceph/volume/{pool}/{volume}'.format(volume=volume, pool=pool)) response = call_api(config, 'get', '/storage/ceph/volume/{pool}/{volume}'.format(volume=volume, pool=pool))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Volume not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -1103,6 +1130,15 @@ def ceph_snapshot_info(config, pool, volume, snapshot):
response = call_api(config, 'get', '/storage/ceph/snapshot/{pool}/{volume}/{snapshot}'.format(snapshot=snapshot, volume=volume, pool=pool)) response = call_api(config, 'get', '/storage/ceph/snapshot/{pool}/{volume}/{snapshot}'.format(snapshot=snapshot, volume=volume, pool=pool))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Snapshot not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')

View File

@ -67,6 +67,15 @@ def net_info(config, net):
response = call_api(config, 'get', '/network/{net}'.format(net=net)) response = call_api(config, 'get', '/network/{net}'.format(net=net))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Network not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -196,6 +205,15 @@ def net_dhcp_info(config, net, mac):
response = call_api(config, 'get', '/network/{net}/lease/{mac}'.format(net=net, mac=mac)) response = call_api(config, 'get', '/network/{net}/lease/{mac}'.format(net=net, mac=mac))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Lease not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -281,6 +299,15 @@ def net_acl_info(config, net, description):
response = call_api(config, 'get', '/network/{net}/acl/{description}'.format(net=net, description=description)) response = call_api(config, 'get', '/network/{net}/acl/{description}'.format(net=net, description=description))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "ACL not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')

View File

@ -81,6 +81,15 @@ def node_info(config, node):
response = call_api(config, 'get', '/node/{node}'.format(node=node)) response = call_api(config, 'get', '/node/{node}'.format(node=node))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match, return not found
return False, "Node not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')

View File

@ -42,6 +42,15 @@ def template_info(config, template, template_type):
response = call_api(config, 'get', '/provisioner/template/{template_type}/{template}'.format(template_type=template_type, template=template)) response = call_api(config, 'get', '/provisioner/template/{template_type}/{template}'.format(template_type=template_type, template=template))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Template not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -171,7 +180,16 @@ def userdata_info(config, userdata):
response = call_api(config, 'get', '/provisioner/userdata/{userdata}'.format(userdata=userdata)) response = call_api(config, 'get', '/provisioner/userdata/{userdata}'.format(userdata=userdata))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Userdata not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0] return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -294,7 +312,16 @@ def script_info(config, script):
response = call_api(config, 'get', '/provisioner/script/{script}'.format(script=script)) response = call_api(config, 'get', '/provisioner/script/{script}'.format(script=script))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Script not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0] return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -417,7 +444,16 @@ def ova_info(config, name):
response = call_api(config, 'get', '/provisioner/ova/{name}'.format(name=name)) response = call_api(config, 'get', '/provisioner/ova/{name}'.format(name=name))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "OVA not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0] return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')
@ -504,7 +540,16 @@ def profile_info(config, profile):
response = call_api(config, 'get', '/provisioner/profile/{profile}'.format(profile=profile)) response = call_api(config, 'get', '/provisioner/profile/{profile}'.format(profile=profile))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found
return False, "Profile not found."
else:
# Return a single instance if the response is a list
if isinstance(response.json(), list):
return True, response.json()[0] return True, response.json()[0]
# This shouldn't happen, but is here just in case
else:
return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')

View File

@ -41,15 +41,15 @@ def vm_info(config, vm):
response = call_api(config, 'get', '/vm/{vm}'.format(vm=vm)) response = call_api(config, 'get', '/vm/{vm}'.format(vm=vm))
if response.status_code == 200: if response.status_code == 200:
if isinstance(response.json(), list) and len(response.json()) > 1: if isinstance(response.json(), list) and len(response.json()) != 1:
# No exact match; return not found # No exact match; return not found
return False, "VM not found." return False, "VM not found."
else: else:
# Return a single instance if the response is a list
if isinstance(response.json(), list): if isinstance(response.json(), list):
response = response.json()[0] return True, response.json()[0]
# This shouldn't happen, but is here just in case
else: else:
response = response.json()
return True, response
return True, response.json() return True, response.json()
else: else:
return False, response.json().get('message', '') return False, response.json().get('message', '')