コード例 #1
0
ファイル: vim.py プロジェクト: allinhtml/nova
        def vim_request_handler(managed_object, **kwargs):
            """
            Builds the SOAP message and parses the response for fault
            checking and other errors.

            managed_object    : Managed Object Reference or Managed
                                Object Name
            **kwargs          : Keyword arguments of the call
            """
            # Dynamic handler for VI SDK Calls
            try:
                request_mo = self._request_managed_object_builder(
                    managed_object)
                request = getattr(self.client.service, attr_name)
                response = request(request_mo, **kwargs)
                # To check for the faults that are part of the message body
                # and not returned as Fault object response from the ESX
                # SOAP server
                if hasattr(error_util.FaultCheckers,
                           attr_name.lower() + "_fault_checker"):
                    fault_checker = getattr(
                        error_util.FaultCheckers,
                        attr_name.lower() + "_fault_checker")
                    fault_checker(response)
                return response
            # Catch the VimFaultException that is raised by the fault
            # check of the SOAP response
            except error_util.VimFaultException as excep:
                raise
            except suds.WebFault as excep:
                doc = excep.document
                detail = doc.childAtPath("/Envelope/Body/Fault/detail")
                fault_list = []
                for child in detail.getChildren():
                    fault_list.append(child.get("type"))
                raise error_util.VimFaultException(fault_list, excep)
            except AttributeError as excep:
                raise error_util.VimAttributeError(
                    _("No such SOAP method "
                      "'%s' provided by VI SDK") % (attr_name), excep)
            except (httplib.CannotSendRequest, httplib.ResponseNotReady,
                    httplib.CannotSendHeader) as excep:
                raise error_util.SessionOverLoadException(
                    _("httplib "
                      "error in %s: ") % (attr_name), excep)
            except Exception as excep:
                # Socket errors which need special handling for they
                # might be caused by ESX API call overload
                if (str(excep).find(ADDRESS_IN_USE_ERROR) != -1
                        or str(excep).find(CONN_ABORT_ERROR)) != -1:
                    raise error_util.SessionOverLoadException(
                        _("Socket "
                          "error in %s: ") % (attr_name), excep)
                # Type error that needs special handling for it might be
                # caused by ESX host API call overload
                elif str(excep).find(RESP_NOT_XML_ERROR) != -1:
                    raise error_util.SessionOverLoadException(
                        _("Type "
                          "error in  %s: ") % (attr_name), excep)
                else:
                    raise error_util.VimException(
                        _("Exception in %s ") % (attr_name), excep)
コード例 #2
0
ファイル: vim.py プロジェクト: yamahata/nova
     raise
 except suds.WebFault, excep:
     doc = excep.document
     detail = doc.childAtPath("/Envelope/Body/Fault/detail")
     fault_list = []
     for child in detail.getChildren():
         fault_list.append(child.get("type"))
     raise error_util.VimFaultException(fault_list, excep)
 except AttributeError, excep:
     raise error_util.VimAttributeError(
         _("No such SOAP method "
           "'%s' provided by VI SDK") % (attr_name), excep)
 except (httplib.CannotSendRequest, httplib.ResponseNotReady,
         httplib.CannotSendHeader), excep:
     raise error_util.SessionOverLoadException(
         _("httplib "
           "error in %s: ") % (attr_name), excep)
 except Exception, excep:
     # Socket errors which need special handling for they
     # might be caused by ESX API call overload
     if (str(excep).find(ADDRESS_IN_USE_ERROR) != -1
             or str(excep).find(CONN_ABORT_ERROR)) != -1:
         raise error_util.SessionOverLoadException(
             _("Socket "
               "error in %s: ") % (attr_name), excep)
     # Type error that needs special handling for it might be
     # caused by ESX host API call overload
     elif str(excep).find(RESP_NOT_XML_ERROR) != -1:
         raise error_util.SessionOverLoadException(
             _("Type "
               "error in  %s: ") % (attr_name), excep)