def processResponse(rspec):
		logging.debug("PROCESSING RESPONSE proocessResponse() STARTED...")
		for action in rspec.response.provisioning.action:

			try:
				actionModel = ActionController.getAction(action.id)
			except Exception as e:
				logging.error("No action in DB with the incoming uuid\n%s", e)
				return

			'''
			If the response is for an action only in QUEUED or ONGOING status, SUCCESS or FAILED actions are finished
			'''

			if actionModel.getStatus() is Action.QUEUED_STATUS or Action.ONGOING_STATUS:
				logging.debug("The incoming response has id: %s and NEW status: %s",actionModel.uuid,actionModel.status)
				actionModel.status = action.status
				actionModel.description = action.description
				actionModel.save()
				#Complete information required for the Plugin: action type and VM
				ActionController.completeActionRspec(action, actionModel)

				#XXX:Implement this method or some other doing this job
				vm = VTDriver.getVMbyUUID(actionModel.getObjectUUID())
				controller=VTDriver.getDriver(vm.Server.get().getVirtTech())
				failedOnCreate = 0
				if actionModel.getStatus() == Action.SUCCESS_STATUS:
					ProvisioningResponseDispatcher.__updateVMafterSUCCESS(actionModel, vm)

				elif actionModel.getStatus() == Action.ONGOING_STATUS:
					ProvisioningResponseDispatcher.__updateVMafterONGOING(actionModel, vm)

				elif actionModel.getStatus() == Action.FAILED_STATUS:
					failedOnCreate = ProvisioningResponseDispatcher.__updateVMafterFAILED(actionModel, vm)

				else:
					vm.setState(VirtualMachine.UNKNOWN_STATE)


				try:
					logging.debug("Sending response to Plugin in sendAsync")
					XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendAsync", XmlHelper.craftXmlClass(rspec))
					if failedOnCreate == 1:
						controller.deleteVM(vm)
				except Exception as e:
					logging.error("Could not connect to Plugin in sendAsync\n%s",e)
					return
			
			#If response is for a finished action
		
			else:
				try:
					#XXX: What should be done if this happen?
					logging.error("Received response for an action in wrong state\n")
					XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendAsync", XmlHelper.getProcessingResponse(Action.ACTION_STATUS_FAILED_TYPE, action, "Received response for an action in wrong state"))
				except Exception as e:
					logging.error(e)
					return
Exemplo n.º 2
0
    def processResponse(rspec):
        logging.debug("PROCESSING RESPONSE processResponse() STARTED...")
        for action in rspec.response.provisioning.action:
            try:
                actionModel = ActionController.getAction(action.id)
            except Exception as e:
                logging.error("No action in DB with the incoming uuid\n%s", e)
                return
            '''
			If the response is for an action only in QUEUED or ONGOING status, SUCCESS or FAILED actions are finished
			'''
            #if str(actionModel.callBackUrl) == str(SfaCommunicator.SFAUrl): #Avoiding unicodes
            #	event = pull(str(action.id))
            #	event.send('continue')
            #	return

            if actionModel.getStatus(
            ) is Action.QUEUED_STATUS or Action.ONGOING_STATUS:
                logging.debug(
                    "The incoming response has id: %s and NEW status: %s" %
                    (actionModel.uuid, actionModel.status))
                was_creating = False
                was_created = False
                actionModel.status = action.status
                actionModel.description = action.description
                actionModel.save()
                #Complete information required for the Plugin: action type and VM
                ActionController.completeActionRspec(action, actionModel)

                #XXX:Implement this method or some other doing this job
                vm = VTDriver.getVMbyUUID(actionModel.getObjectUUID())
                if vm.state == "creating...":
                    was_creating = True
                elif vm.state == "starting...":
                    was_created = True
                controller = VTDriver.getDriver(vm.Server.get().getVirtTech())
                failedOnCreate = 0
                # Update VM model with new status from OXAD
                if actionModel.getStatus() == Action.SUCCESS_STATUS:
                    ProvisioningResponseDispatcher.__updateVMafterSUCCESS(
                        actionModel, vm)
                elif actionModel.getStatus() == Action.ONGOING_STATUS:
                    ProvisioningResponseDispatcher.__updateVMafterONGOING(
                        actionModel, vm)
                elif actionModel.getStatus() == Action.FAILED_STATUS:
                    failedOnCreate = ProvisioningResponseDispatcher.__updateVMafterFAILED(
                        actionModel, vm)
                else:
                    vm.setState(VirtualMachine.UNKNOWN_STATE)
                try:
                    created = False
                    vm_started = False
                    if vm.state == "created (stopped)":
                        created = True
                    elif vm.state == "running":
                        vm_started = True
                    logging.debug("Sending response to plug-in in sendAsync")
                    if str(vm.callBackURL) == 'SFA.OCF.VTM':
                        logging.debug("callback: %s" % vm.callBackURL)
                        print "-------------->PRD: Created:", created, "Was_creating:", was_creating, "vm_started:", vm_started
                        print "-------------->PRD Action:", action, action.server.__dict__
                        # Start VM just after creating sliver/VM
                        if created and was_creating:
                            from vt_manager.communication.sfa.drivers.VTSfaDriver import VTSfaDriver
                            driver = VTSfaDriver(None)
                            driver.crud_slice(vm.sliceName, vm.projectName,
                                              "start_slice")
                            ProvisioningResponseDispatcher.__clean_up_reservations(
                                vm.uuid)
                            return
                        #if was_created and vm_started:
                        if vm_started:
                            ifaces = vm.getNetworkInterfaces()
                            for iface in ifaces:
                                if iface.isMgmt:
                                    ip = iface.ip4s.all()[0].ip

                            # Contextualize VMs
                            ProvisioningResponseDispatcher.__contextualize_vm(
                                vm, ip)
                            # Cleaning up reservation objects
                        return
                    XmlRpcClient.callRPCMethod(vm.getCallBackURL(),
                                               "sendAsync",
                                               XmlHelper.craftXmlClass(rspec))
                    if failedOnCreate == 1:
                        controller.deleteVM(vm)
                        # Keep actions table up-to-date after each deletion
                        actionModel.delete()
                except Exception as e:
                    logging.error(
                        "Could not connect to Plugin in sendAsync\n%s", e)
                    return

            #If response is for a finished action
            else:
                try:
                    #XXX: What should be done if this happen?
                    logging.error(
                        "Received response for an action in wrong state\n")
                    XmlRpcClient.callRPCMethod(
                        vm.getCallBackURL(), "sendAsync",
                        XmlHelper.getProcessingResponse(
                            Action.ACTION_STATUS_FAILED_TYPE, action,
                            "Received response for an action in wrong state"))
                except Exception as e:
                    logging.error(e)
                    return
Exemplo n.º 3
0
    def processresponseSync(rspec):
        """
            Thread-free implementation.
            """
        logging.debug("PROCESSING RESPONSE processResponseSync() STARTED...")
        for action in rspec.response.provisioning.action:
            try:
                actionModel = ActionController.getAction(action.id)
            except Exception as e:
                logging.error("No action in DB with the incoming uuid\n%s", e)
                return
            """
                If the response is for an action only in QUEUED or ONGOING status, SUCCESS or FAILED actions are finished
                """
            #if str(actionModel.callBackUrl) == str(SfaCommunicator.SFAUrl): #Avoiding unicodes
            #       event = pull(str(action.id))
            #       event.send('continue')
            #       return

            logging.debug(
                "................................ actionModel.getStatus(): %s ................."
                % str(actionModel.getStatus()))
            if actionModel.getStatus(
            ) is Action.QUEUED_STATUS or Action.ONGOING_STATUS:
                logging.debug(
                    "The incoming response has id: %s and NEW status: %s" %
                    (actionModel.uuid, actionModel.status))
                actionModel.status = action.status
                actionModel.description = action.description
                actionModel.save()
                #Complete information required for the Plugin: action type and VM
                ActionController.completeActionRspec(action, actionModel)

                #XXX:Implement this method or some other doing this job
                vm = VTDriver.getVMbyUUID(actionModel.getObjectUUID())
                controller = VTDriver.getDriver(vm.Server.get().getVirtTech())
                failedOnCreate = 0
                if actionModel.getStatus() == Action.SUCCESS_STATUS:
                    ProvisioningResponseDispatcher.__updateVMafterSUCCESS(
                        actionModel, vm)
                elif actionModel.getStatus() == Action.ONGOING_STATUS:
                    ProvisioningResponseDispatcher.__updateVMafterONGOING(
                        actionModel, vm)
                elif actionModel.getStatus() == Action.FAILED_STATUS:
                    failedOnCreate = ProvisioningResponseDispatcher.__updateVMafterFAILED(
                        actionModel, vm)
                else:
                    vm.setState(VirtualMachine.UNKNOWN_STATE)

                try:
                    logging.debug("Sending response to Plugin in sendAsync")
                    if str(actionModel.callBackUrl) == 'SFA.OCF.VTM':
                        logging.debug(">>>>>>> SFA.OCF.VTM\n\n\n")
                        if failedOnCreate:
                            logging.debug(
                                "........... failedOnCreate.........")
                            expiring_slices = vm.objects.filter(
                                sliceName=vm.sliceName,
                                projectName=vm.projectName)
                            logging.debug(
                                "........... expiring_slices: %s ..........." %
                                str(expiring_slices))
                            if len(expiring_slices) == 1:
                                expiring_slices[0].delete()

                    # Cleaning up reservation objects
                    ProvisioningResponseDispatcher.__clean_up_reservations(
                        vm.name)

                    XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendSync",
                                               XmlHelper.craftXmlClass(rspec))
                    if failedOnCreate == 1:
                        controller.deleteVM(vm)
                        # Keep actions table up-to-date after each deletion
                        actionModel.delete()
                except Exception as e:
                    logging.error(
                        "Could not connect to Plugin in sendSync. Exception: %s",
                        e)
                    return

            # If response is for a finished action
            else:
                try:
                    #XXX: What should be done if this happen?
                    logging.error(
                        "Received response for an action in wrong state")
                    XmlRpcClient.callRPCMethod(
                        vm.getCallBackURL(), "sendSync",
                        XmlHelper.getProcessingResponse(
                            Action.ACTION_STATUS_FAILED_TYPE, action,
                            "Received response for an action in wrong state"))
                except Exception as e:
                    logging.error(e)
                    return
	def processResponse(rspec):
		logging.debug("PROCESSING RESPONSE processResponse() STARTED...")
		for action in rspec.response.provisioning.action:
			try:
				actionModel = ActionController.getAction(action.id)
			except Exception as e:
				logging.error("No action in DB with the incoming uuid\n%s", e)
				return

			'''
			If the response is for an action only in QUEUED or ONGOING status, SUCCESS or FAILED actions are finished
			'''
			#if str(actionModel.callBackUrl) == str(SfaCommunicator.SFAUrl): #Avoiding unicodes
			#	event = pull(str(action.id))
			#	event.send('continue')
			#	return

			if actionModel.getStatus() is Action.QUEUED_STATUS or Action.ONGOING_STATUS:
				logging.debug("The incoming response has id: %s and NEW status: %s" % (actionModel.uuid,actionModel.status))
                                was_creating = False
                                was_created = False
                           	actionModel.status = action.status
				actionModel.description = action.description
				actionModel.save()
				#Complete information required for the Plugin: action type and VM
				ActionController.completeActionRspec(action, actionModel)

				#XXX:Implement this method or some other doing this job
				vm = VTDriver.getVMbyUUID(actionModel.getObjectUUID())
                                if vm.state == "creating...":
                                    was_creating = True
                                elif vm.state == "starting...":
                                    was_created = True
				controller=VTDriver.getDriver(vm.Server.get().getVirtTech())
				failedOnCreate = 0
				# Update VM model with new status from OXAD
				if actionModel.getStatus() == Action.SUCCESS_STATUS:
					ProvisioningResponseDispatcher.__updateVMafterSUCCESS(actionModel, vm)
				elif actionModel.getStatus() == Action.ONGOING_STATUS:
					ProvisioningResponseDispatcher.__updateVMafterONGOING(actionModel, vm)
				elif actionModel.getStatus() == Action.FAILED_STATUS:
					failedOnCreate = ProvisioningResponseDispatcher.__updateVMafterFAILED(actionModel, vm)
				else:
					vm.setState(VirtualMachine.UNKNOWN_STATE)
				try:
                                        created = False
                                        vm_started = False
                                        if vm.state == "created (stopped)":
                                            created = True
                                        elif vm.state == "running":
                                            vm_started = True
                                        logging.debug("Sending response to plug-in in sendAsync")
                                        if str(vm.callBackURL) == 'SFA.OCF.VTM':
                                                logging.debug("callback: %s" % vm.callBackURL)
                                                print "-------------->PRD: Created:", created, "Was_creating:", was_creating, "vm_started:", vm_started 
                                                print "-------------->PRD Action:", action, action.server.__dict__ 
                                                # Start VM just after creating sliver/VM
                                                if created and was_creating:
                                                    from vt_manager.communication.sfa.drivers.VTSfaDriver import VTSfaDriver
                                                    driver = VTSfaDriver(None)
                                                    driver.crud_slice(vm.sliceName,vm.projectName, "start_slice")
                                                    ProvisioningResponseDispatcher.__clean_up_reservations(vm.uuid)
                                                    return 
                                                #if was_created and vm_started:
                                                if vm_started:
                                                    ifaces = vm.getNetworkInterfaces()
                                                    for iface in ifaces:
                                                        if iface.isMgmt:
                                                            ip = iface.ip4s.all()[0].ip
                                                    
                                                    # Contextualize VMs
                                                    ProvisioningResponseDispatcher.__contextualize_vm(vm, ip)
                                                    # Cleaning up reservation objects
					        return
					XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendAsync", XmlHelper.craftXmlClass(rspec))
					if failedOnCreate == 1:
						controller.deleteVM(vm)
						# Keep actions table up-to-date after each deletion
						actionModel.delete()
				except Exception as e:
					logging.error("Could not connect to Plugin in sendAsync\n%s",e)
					return
			
			#If response is for a finished action
			else:
				try:
					#XXX: What should be done if this happen?
					logging.error("Received response for an action in wrong state\n")
					XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendAsync", XmlHelper.getProcessingResponse(Action.ACTION_STATUS_FAILED_TYPE, action, "Received response for an action in wrong state"))
				except Exception as e:
					logging.error(e)
					return
 def processresponseSync(rspec):
     """
     Thread-free implementation.
     """
     logging.debug("PROCESSING RESPONSE processResponseSync() STARTED...")
     for action in rspec.response.provisioning.action:
         try:
             actionModel = ActionController.getAction(action.id)
         except Exception as e:
             logging.error("No action in DB with the incoming uuid\n%s", e)
             return
         
         """
         If the response is for an action only in QUEUED or ONGOING status, SUCCESS or FAILED actions are finished
         """
         #if str(actionModel.callBackUrl) == str(SfaCommunicator.SFAUrl): #Avoiding unicodes
         #       event = pull(str(action.id))
         #       event.send('continue')
         #       return
         
         logging.debug("................................ actionModel.getStatus(): %s ................." % str(actionModel.getStatus()))
         if actionModel.getStatus() is Action.QUEUED_STATUS or Action.ONGOING_STATUS:
             logging.debug("The incoming response has id: %s and NEW status: %s" % (actionModel.uuid,actionModel.status))
             actionModel.status = action.status
             actionModel.description = action.description
             actionModel.save()
             #Complete information required for the Plugin: action type and VM
             ActionController.completeActionRspec(action, actionModel)
             
             #XXX:Implement this method or some other doing this job
             vm = VTDriver.getVMbyUUID(actionModel.getObjectUUID())
             controller = VTDriver.getDriver(vm.Server.get().getVirtTech())
             failedOnCreate = 0
             if actionModel.getStatus() == Action.SUCCESS_STATUS:
                 ProvisioningResponseDispatcher.__updateVMafterSUCCESS(actionModel, vm)
             elif actionModel.getStatus() == Action.ONGOING_STATUS:
                 ProvisioningResponseDispatcher.__updateVMafterONGOING(actionModel, vm)
             elif actionModel.getStatus() == Action.FAILED_STATUS:
                 failedOnCreate = ProvisioningResponseDispatcher.__updateVMafterFAILED(actionModel, vm)
             else:
                 vm.setState(VirtualMachine.UNKNOWN_STATE)
             
             try:
                 logging.debug("Sending response to Plugin in sendAsync")
                 if str(actionModel.callBackUrl) == 'SFA.OCF.VTM':
                     logging.debug(">>>>>>> SFA.OCF.VTM\n\n\n")
                     if failedOnCreate:
                         logging.debug("........... failedOnCreate.........")
                         expiring_slices = vm.objects.filter(sliceName=vm.sliceName,projectName=vm.projectName)
                         logging.debug("........... expiring_slices: %s ..........." % str(expiring_slices))
                         if len(expiring_slices)  == 1:
                             expiring_slices[0].delete()
                 
                 # Cleaning up reservation objects
                 ProvisioningResponseDispatcher.__clean_up_reservations(vm.name)
                 
                 XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendSync", XmlHelper.craftXmlClass(rspec))
                 if failedOnCreate == 1:
                     controller.deleteVM(vm)
                     # Keep actions table up-to-date after each deletion
                     actionModel.delete()
             except Exception as e:
                 logging.error("Could not connect to Plugin in sendSync. Exception: %s",e)
                 return
     
         # If response is for a finished action
         else:
             try:
                 #XXX: What should be done if this happen?
                 logging.error("Received response for an action in wrong state")
                 XmlRpcClient.callRPCMethod(vm.getCallBackURL(), "sendSync", XmlHelper.getProcessingResponse(Action.ACTION_STATUS_FAILED_TYPE, action, "Received response for an action in wrong state"))
             except Exception as e:
                 logging.error(e)
                 return