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: