Esempio n. 1
0
 def _communicate(self, wsm, name=None):
     try:
         self._proto_connect()
         self._logger.debug("Sending: " + wsm.get_text())
         result = self._proto_ship_payload(wsm.get_text())
         self._logger.debug("Received: " + str(result))
         en = WsManResponse().execute_str(result)
         out = self._parse_output(en, name)
         return out
     except Exception as ex:
         self._logger.debug(str(ex))
         # fake as if the error came from the WsMan subsystem
         sx = WsManRequest()
         sx.add_error(ex)
         self._logger.debug(sx.get_text())
         en = WsManResponse().execute_str(sx.get_text())
         out = self._parse_output(en)
         return out
Esempio n. 2
0
 def _parse_output(self, en, name=None):
     retval = {}
     if "Header" in en:
         rgsp = "http://schemas.xmlsoap.org/ws/2004/09/transfer/GetResponse"
         if "Action" in en["Header"] and en["Header"]["Action"] == rgsp:
             retval['Status'] = 'Success'
             retval['Data'] = en['Body']
         rfault = "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"
         if "Action" in en["Header"] and en["Header"]["Action"] == rfault:
             retval['Status'] = 'Failed'
     if not "Body" in en:
         retval['Status'] = 'Invalid JSON. Does not have Body!'
     elif "ClientFault" in en["Body"]:
         retval['Status'] = 'Found Client (SDK) Side Fault'
         retval['Fault.Data'] = en["Body"]["ClientFault"]
         if "Reason" in en["Body"]["ClientFault"] and \
                 "Text" in en["Body"]["ClientFault"]["Reason"]:
             retval['Message'] = WsManResponse().get_message(
                 en["Body"]["ClientFault"]["Reason"])
     elif "Fault" in en["Body"]:
         retval['Status'] = 'Found Fault'
         retval['Fault.Data'] = en["Body"]["Fault"]
         if "Reason" in en["Body"]["Fault"]:
             retval['Message'] = WsManResponse().get_message(
                 en["Body"]["Fault"]["Reason"])
         if retval['Message'] == "" and "Detail" in en["Body"]["Fault"]:
             retval['Message'] = WsManResponse().get_message(
                 en["Body"]["Fault"]["Detail"])
     elif "EnumerateResponse" in en["Body"]:
         retval['Status'] = 'Success'
         retval['Data'] = en["Body"]["EnumerateResponse"]["Items"]
     elif "IdentifyResponse" in en["Body"]:
         retval['Status'] = 'Success'
         retval['Data'] = en["Body"]
     else:
         for entry in en["Body"]:
             if not entry.endswith("_OUTPUT"):
                 continue
             retval['Data'] = en["Body"]
             retval['Status'] = 'Not understood the message. Sorry!'
             if "Message" in en["Body"][entry]:
                 retval['Status'] = en["Body"][entry]["Message"]
                 retval['Message'] = en["Body"][entry]["Message"]
             if "MessageID" in en["Body"][entry]:
                 retval['MessageID'] = en["Body"][entry]["MessageID"]
             if "ReturnValue" in en["Body"][entry]:
                 ret = int(en["Body"][entry]["ReturnValue"])
                 retval['Return'] = TypeHelper.get_name(ret, ReturnValueMap)
                 retval['Status'] = retval['Return']
                 if ret == TypeHelper.resolve(ReturnValue.JobCreated):
                     retval['Job'] = {"ResourceURI": "", "JobId": ""}
                     ss = en["Body"][entry]
                     if "Job" in ss:
                         ss = ss["Job"]
                     if 'RebootJobID' in ss:
                         ss = ss['RebootJobID']
                     if "EndpointReference" in ss:
                         ss = ss["EndpointReference"]
                     if "ReferenceParameters" in ss:
                         ss = ss["ReferenceParameters"]
                     if "ResourceURI" in ss:
                         retval['Job']['ResourceURI'] = ss["ResourceURI"]
                     if "SelectorSet" in ss:
                         ss = ss["SelectorSet"]
                     if "Selector" in ss:
                         ss = ss["Selector"]
                     if len(ss) >= 1:
                         retval['Job']['JobId'] = ss[0]
                         retval['Job']['JobIdRest'] = [
                             ss[i] for i in range(1, len(ss))
                         ]
                     else:
                         retval['Job']['JobId'] = 'Unknown'
                         retval['Job']['JobIdRest'] = ss
                     retval['Status'] = 'Success'
     if not 'Status' in retval:
         retval['Status'] = 'Dont understand the message'
         retval['Data'] = en["Body"]
     return retval