Expose detail information upon API call failure
authorBin Yang <bin.yang@windriver.com>
Tue, 28 Mar 2017 06:54:38 +0000 (14:54 +0800)
committerBin Yang <bin.yang@windriver.com>
Tue, 28 Mar 2017 06:54:38 +0000 (14:54 +0800)
Change-Id: I6e42cebeb7e1c5edd3f77b8c0c6c091d04fcb364
Issue-Id: MULTIVIM-58
Signed-off-by: Bin Yang <bin.yang@windriver.com>
20 files changed:
kilo/kilo/requests/views/flavor.py
kilo/kilo/requests/views/hosts.py
kilo/kilo/requests/views/image.py
kilo/kilo/requests/views/limits.py
kilo/kilo/requests/views/network.py
kilo/kilo/requests/views/server.py
kilo/kilo/requests/views/subnet.py
kilo/kilo/requests/views/tenants.py
kilo/kilo/requests/views/volume.py
kilo/kilo/requests/views/vport.py
newton/newton/requests/views/flavor.py
newton/newton/requests/views/hosts.py
newton/newton/requests/views/image.py
newton/newton/requests/views/limits.py
newton/newton/requests/views/network.py
newton/newton/requests/views/server.py
newton/newton/requests/views/subnet.py
newton/newton/requests/views/tenants.py
newton/newton/requests/views/volume.py
newton/newton/requests/views/vport.py

index fb8fb69..84cbc41 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -118,6 +118,9 @@ class Flavors(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -241,6 +244,9 @@ class Flavors(APIView):
                 self.delete_flavor(sess, flavorid)
 
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
 
@@ -309,6 +315,9 @@ class Flavors(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index dfd3451..022c59e 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -76,6 +76,9 @@ class Hosts(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index c8f66b2..a3e7001 100644 (file)
@@ -16,7 +16,7 @@ import json
 import urllib2
 import threading
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -65,6 +65,9 @@ class imageThread (threading.Thread):
 
             logger.debug("response status code of transfer_image %s" % resp.status_code)
             return None
+        except HttpError as e:
+            logger.error("transfer_image, HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return None
         except Exception as e:
             logger.error(traceback.format_exc())
             logger.debug("Failed to transfer_image:%s" % str(e))
@@ -90,6 +93,9 @@ class Images(APIView):
             return Response(data=content, status=status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -203,6 +209,9 @@ class Images(APIView):
         except urllib2.URLError as e:
             return Response(data={'error': 'image is not accessible:%s' % str(e)},
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -223,6 +232,9 @@ class Images(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index ee44124..3b6f052 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -75,6 +75,9 @@ class Limits(APIView):
             return Response(data=content_all, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index eb45189..61a409e 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -48,6 +48,9 @@ class Networks(APIView):
 
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -132,6 +135,9 @@ class Networks(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -155,6 +161,9 @@ class Networks(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 0da19c4..9244042 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -79,6 +79,9 @@ class Servers(APIView):
             return Response(data=content, status=status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -240,6 +243,9 @@ class Servers(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -260,6 +266,9 @@ class Servers(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 3512a2f..8dabafb 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Subnets(APIView):
             return Response(data=content, status=status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -134,6 +137,9 @@ class Subnets(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -157,6 +163,9 @@ class Subnets(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index c8a7fff..31b17a0 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -70,6 +70,9 @@ class Tenants(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 6682a4c..41a8f85 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Volumes(APIView):
             return Response(data=content, status=status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -136,6 +139,9 @@ class Volumes(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -156,6 +162,9 @@ class Volumes(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 987524d..7fd6b90 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Vports(APIView):
             return Response(data=content, status=status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -125,6 +128,9 @@ class Vports(APIView):
             return self.create_port(request, vimid, tenantid)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -189,6 +195,9 @@ class Vports(APIView):
             return Response(status=resp.status_code)
         except VimDriverKiloException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index c59c42c..2b7377b 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -118,6 +118,9 @@ class Flavors(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -241,6 +244,9 @@ class Flavors(APIView):
                 self.delete_flavor(sess, flavorid)
 
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
 
@@ -306,6 +312,9 @@ class Flavors(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 7801c55..8f05b7d 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -76,6 +76,9 @@ class Hosts(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index bf24771..4e929d7 100644 (file)
@@ -16,7 +16,7 @@ import json
 import urllib2
 import threading
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -65,9 +65,12 @@ class imageThread (threading.Thread):
 
             logger.debug("response status code of transfer_image %s" % resp.status_code)
             return None
+        except HttpError as e:
+            logger.error("transfer_image, HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return None
         except Exception as e:
             logger.error(traceback.format_exc())
-            logger.debug("Failed to transfer_image:%s" % str(e))
+            logger.error("Failed to transfer_image:%s" % str(e))
             return None
         pass
 
@@ -90,6 +93,9 @@ class Images(APIView):
             return Response(data=content, status=status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -203,6 +209,9 @@ class Images(APIView):
         except urllib2.URLError as e:
             return Response(data={'error': 'image is not accessible:%s' % str(e)},
                             status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -223,6 +232,9 @@ class Images(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 83d0e50..01bee2b 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -75,6 +75,9 @@ class Limits(APIView):
             return Response(data=content_all, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index a1b440d..c1eae5e 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -48,6 +48,9 @@ class Networks(APIView):
 
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -132,6 +135,9 @@ class Networks(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -155,6 +161,9 @@ class Networks(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 5aec190..fad1281 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -79,6 +79,9 @@ class Servers(APIView):
             return Response(data=content, status=status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -239,6 +242,9 @@ class Servers(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -259,6 +265,9 @@ class Servers(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index b37d4d3..6cf6985 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Subnets(APIView):
             return Response(data=content, status=status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -134,6 +137,9 @@ class Subnets(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -157,6 +163,9 @@ class Subnets(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index 7f82bb6..bcc80bd 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -75,6 +75,9 @@ class Tenants(APIView):
             return Response(data=content, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index a126aad..3f95890 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Volumes(APIView):
             return Response(data=content, status=status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -136,6 +139,9 @@ class Volumes(APIView):
             return Response(data=resp_body, status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -156,6 +162,9 @@ class Volumes(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
index a5b8db9..cb80603 100644 (file)
@@ -14,7 +14,7 @@
 import logging
 import json
 import traceback
-
+from keystoneauth1.exceptions import HttpError
 from rest_framework import status
 from rest_framework.response import Response
 from rest_framework.views import APIView
@@ -50,6 +50,9 @@ class Vports(APIView):
             return Response(data=content, status=status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -125,6 +128,9 @@ class Vports(APIView):
             return self.create_port(request, vimid, tenantid)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},
@@ -189,6 +195,9 @@ class Vports(APIView):
             return Response(status=resp.status_code)
         except VimDriverNewtonException as e:
             return Response(data={'error': e.content}, status=e.status_code)
+        except HttpError as e:
+            logger.error("HttpError: status:%s, response:%s" % (e.http_status, e.response.json()))
+            return Response(data=e.response.json(), status=e.http_status)
         except Exception as e:
             logger.error(traceback.format_exc())
             return Response(data={'error': str(e)},