Added error handling when OpenStack API works unexpectedly
Added try/except in cases when the formula makes the request
to OpenStack API and fetches some fields in expected response.
Change-Id: I82b644172b80c58bc014a628fe5f037415e9e874
Related-PROD: PROD-33736
diff --git a/_modules/runtest/tempest_sections/compute.py b/_modules/runtest/tempest_sections/compute.py
index 3400c12..a31d6fb 100644
--- a/_modules/runtest/tempest_sections/compute.py
+++ b/_modules/runtest/tempest_sections/compute.py
@@ -134,8 +134,11 @@
keystone_profile_admin = self.runtest_opts.get('keystone_profile_admin', {})
res = self.authenticated_openstack_module_call(
nodes[0], 'glanceng.image_list', profile=keystone_profile_admin)[nodes[0]]
- images = [n['id'] for n in res if n['name'] == image_name]
-
+ try:
+ images = [n['id'] for n in res if n['name'] == image_name]
+ except (ValueError, TypeError, KeyError):
+ raise Exception("Could not get list of images. Got the response:"
+ " {}".format(res))
if len(images) != 1:
raise Exception("Error getting images: {}".format(images))
@@ -154,8 +157,11 @@
keystone_profile_admin = self.runtest_opts.get('keystone_profile_admin', {})
res = self.authenticated_openstack_module_call(
nodes[0], 'glanceng.image_list', profile=keystone_profile_admin)[nodes[0]]
- images = [n['id'] for n in res if n['name'] == image_name]
-
+ try:
+ images = [n['id'] for n in res if n['name'] == image_name]
+ except (ValueError, TypeError, KeyError):
+ raise Exception("Could not get list of images. Got the response:"
+ " {}".format(res))
if len(images) != 1:
raise Exception("Error getting images: {}".format(images))
diff --git a/_modules/runtest/tempest_sections/dns.py b/_modules/runtest/tempest_sections/dns.py
index 998f021..eed871e 100644
--- a/_modules/runtest/tempest_sections/dns.py
+++ b/_modules/runtest/tempest_sections/dns.py
@@ -60,9 +60,12 @@
keystone_profile_admin = self.runtest_opts.get('keystone_profile_admin', {})
res = self.authenticated_openstack_module_call(
nodes[0], 'designatev2.zone_list', cloud_name=keystone_profile_admin)[nodes[0]]
- zones = [n['id'] for n in res['zones'] if n['name'] == zone_name]
-
+ try:
+ zones = [n['id'] for n in res['zones'] if n['name'] == zone_name]
+ except (ValueError, TypeError, KeyError):
+ raise Exception("Could not get list of zones. Got the response:"
+ " {}".format(res))
if len(zones) != 1:
- raise Exception("Error getting zones: {}".format(images))
+ raise Exception("Error getting zones: {}".format(zones))
return zones[0]
diff --git a/_modules/runtest/tempest_sections/network.py b/_modules/runtest/tempest_sections/network.py
index fe06b0d..ec57bcd 100644
--- a/_modules/runtest/tempest_sections/network.py
+++ b/_modules/runtest/tempest_sections/network.py
@@ -119,11 +119,16 @@
'keystone_profile_admin',
{}
)
- res = self.authenticated_openstack_module_call(
+ resp = self.authenticated_openstack_module_call(
nodes[0],
'neutronng.list_networks',
profile=keystone_profile_admin
- )[nodes[0]]['networks']
+ )[nodes[0]]
+ try:
+ res = resp['networks']
+ except (ValueError, TypeError, KeyError):
+ raise Exception("Could not get list of networks. Got the response:"
+ " {}".format(resp))
networks = [n['id'] for n in res if n['name'] == network_name]
if len(networks) != 1:
diff --git a/_modules/runtest/tempest_sections/network_feature_enabled.py b/_modules/runtest/tempest_sections/network_feature_enabled.py
index 8a2d213..41003a0 100644
--- a/_modules/runtest/tempest_sections/network_feature_enabled.py
+++ b/_modules/runtest/tempest_sections/network_feature_enabled.py
@@ -27,9 +27,14 @@
return
keystone_profile_admin = self.runtest_opts.get(
'keystone_profile_admin', {})
- res = self.authenticated_openstack_module_call(
+ resp = self.authenticated_openstack_module_call(
nodes[0], 'neutronng.list_extensions',
- profile=keystone_profile_admin)[nodes[0]].get('extensions')
+ profile=keystone_profile_admin)[nodes[0]]
+ try:
+ res = resp.get('extensions')
+ except AttributeError:
+ raise Exception(
+ "Could not get API extensions. Got the response: {}".format(resp))
if res:
extensions = ', '.join([i['alias'] for i in res])
return extensions
diff --git a/_modules/runtest/tempest_sections/validation.py b/_modules/runtest/tempest_sections/validation.py
index 541243e..f418e1f 100644
--- a/_modules/runtest/tempest_sections/validation.py
+++ b/_modules/runtest/tempest_sections/validation.py
@@ -37,8 +37,13 @@
nodes = self.get_nodes_where_condition_match(c)
keystone_profile_admin = self.runtest_opts.get('keystone_profile_admin', {})
- res = self.authenticated_openstack_module_call(
- nodes[0], 'neutronng.list_networks', profile=keystone_profile_admin)[nodes[0]]['networks']
+ resp = self.authenticated_openstack_module_call(
+ nodes[0], 'neutronng.list_networks', profile=keystone_profile_admin)[nodes[0]]
+ try:
+ res = resp['networks']
+ except (TypeError, ValueError, KeyError):
+ raise Exception(
+ "Could not get list of networks. Got the response: {}".format(resp))
external_routers = [net['router:external'] for net in res]
if True in external_routers: