コード例 #1
0
    def getActionInstance(servers_slivers, projectName, sliceName):
        provisioningRSpecs = list()
        rspec = XmlHelper.getSimpleActionQuery()
        actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()
        for vms in servers_slivers:
            server_id = vms['component_id']
            for vm in vms['slivers']:
                server = VTServer.objects.get(uuid=server_id)
                VMSfaManager.setDefaultVMParameters(vm, server, projectName,
                                                    sliceName)
                actionClass = copy.deepcopy(actionClassEmpty)
                actionClass.id = uuid.uuid4()
                Translator.VMdictToClass(
                    vm, actionClass.server.virtual_machines[0])
                Translator.VMdicIfacesToClass(
                    vm['interfaces'], actionClass.server.virtual_machines[0].
                    xen_configuration.interfaces)
                actionClass.server.uuid = server_id
                actionClass.server.virtualization_type = server.getVirtTech()
                rspec.query.provisioning.action.append(actionClass)
                provisioningRSpecs.append(rspec.query.provisioning)

        return provisioningRSpecs
コード例 #2
0
 def connectAndSend(URL, action):
     try:
         vt_manager = xmlrpclib.Server(URL)
         vt_manager.send(PLUGIN_URL, XmlHelper.craftXmlClass(XmlHelper.getSimpleActionQuery(action)))
     except Exception as e:
         print "Exception connecting to VT Manager"
         print e
         return
コード例 #3
0
 def connectAndSend(URL, action, client):
     try:
         vt_manager = xmlrpclib.Server(URL)
         PLUGIN_URL = (
             "https://" + client.username + ":" + client.password + "@" + SITE_IP_ADDR + "/vt_plugin/xmlrpc/vt_am/"
         )
         vt_manager.send(PLUGIN_URL, XmlHelper.craftXmlClass(XmlHelper.getSimpleActionQuery(action)))
     except Exception as e:
         logging.error("Exception connecting to VT Manager")
         logging.error(e)
         return
コード例 #4
0
 def connectAndSend(URL, action, client):
     try:
         vt_manager = xmlrpclib.Server(URL)
         PLUGIN_URL = 'https://' + client.username + ':' + client.password + '@' + SITE_IP_ADDR + '/vt_plugin/xmlrpc/vt_am/'
         vt_manager.send(
             PLUGIN_URL,
             XmlHelper.craftXmlClass(
                 XmlHelper.getSimpleActionQuery(action)))
     except Exception as e:
         logging.error("Exception connecting to VT Manager")
         logging.error(e)
         return
コード例 #5
0
ファイル: vtam.py プロジェクト: HalasNet/felix
    def get_action_instance(self, reservation):
 	rspec = XmlHelper.getSimpleActionQuery()
 	actionClass = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClass.type_ = "create"
        rspec.query.provisioning.action.pop()
        #server = reservation.server()
        server = reservation.server
 	vm = self.get_default_vm_parameters(reservation)
        actionClass.id = uuid.uuid4()
        self.vm_dict_to_class(vm, actionClass.server.virtual_machines[0])
 	self.vm_dict_ifaces_to_class(vm["interfaces"],actionClass.server.virtual_machines[0].xen_configuration.interfaces)
        actionClass.server.uuid = server.uuid
        actionClass.server.virtualization_type = server.getVirtTech()
        rspec.query.provisioning.action.append(actionClass)
        return rspec.query.provisioning
コード例 #6
0
 def get_action_instance(self, reservation):
     rspec = XmlHelper.getSimpleActionQuery()
     actionClass = copy.deepcopy(rspec.query.provisioning.action[0])
     actionClass.type_ = "create"
     rspec.query.provisioning.action.pop()
     #server = reservation.server()
     server = reservation.server
     vm = self.get_default_vm_parameters(reservation)
     actionClass.id = uuid.uuid4()
     self.vm_dict_to_class(vm, actionClass.server.virtual_machines[0])
     self.vm_dict_ifaces_to_class(
         vm["interfaces"], actionClass.server.virtual_machines[0].
         xen_configuration.interfaces)
     actionClass.server.uuid = server.uuid
     actionClass.server.virtualization_type = server.getVirtTech()
     rspec.query.provisioning.action.append(actionClass)
     return rspec.query.provisioning
コード例 #7
0
    def processVMCreation(instances, server_id, slice, requestUser):

        rspec = XmlHelper.getSimpleActionQuery()
        actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()
        for instance in instances:
            instance.uuid = uuid.uuid4()
            instance.serverID = server_id
            instance.state = "on queue"
            instance.sliceId = slice.uuid
            instance.sliceName = slice.name

            #assign same virt technology as the server where vm created
            s = VTServer.objects.get(uuid=server_id)
            instance.virtTech = s.virtTech
            instance.projectId = slice.project.uuid
            instance.projectName = slice.project.name
            instance.aggregate_id = s.aggregate_id
            #assign parameters according to selected disc image
            #TODO get the rest of image choices!
            if instance.disc_image == 'test':
                instance.operatingSystemType = 'GNU/Linux'
                instance.operatingSystemVersion = '6.0'
                instance.operatingSystemDistribution = 'Debian'
                instance.hdOriginPath = "default/test/lenny"
            if instance.disc_image == 'default':
                instance.operatingSystemType = 'GNU/Linux'
                instance.operatingSystemVersion = '6.0'
                instance.operatingSystemDistribution = 'Debian'
                instance.hdOriginPath = "default/default.tar.gz"

            actionClass = copy.deepcopy(actionClassEmpty)
            actionClass.id = uuid.uuid4()
            Translator.VMmodelToClass(instance,
                                      actionClass.server.virtual_machines[0])
            server = VTServer.objects.get(uuid=server_id)
            actionClass.server.uuid = server_id
            actionClass.server.virtualization_type = server.getVirtTech()
            rspec.query.provisioning.action.append(actionClass)

        ServiceThread.startMethodInNewThread(
            ProvisioningDispatcher.processProvisioning,
            rspec.query.provisioning, requestUser)
コード例 #8
0
ファイル: VMSfaManager.py プロジェクト: fp7-alien/C-BAS
    def getActionInstance(servers_slivers,projectName,sliceName):
	provisioningRSpecs = list()
	rspec = XmlHelper.getSimpleActionQuery()
	actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()
        for vms in servers_slivers:
	    server_id = vms['component_id']
	    for vm in vms['slivers']:
		server = VTServer.objects.get(uuid = server_id)
	        VMSfaManager.setDefaultVMParameters(vm,server,projectName,sliceName)
		actionClass = copy.deepcopy(actionClassEmpty)
                actionClass.id = uuid.uuid4()
                Translator.VMdictToClass(vm, actionClass.server.virtual_machines[0])
		Translator.VMdicIfacesToClass(vm['interfaces'],actionClass.server.virtual_machines[0].xen_configuration.interfaces)
                actionClass.server.uuid = server_id
                actionClass.server.virtualization_type = server.getVirtTech()
                rspec.query.provisioning.action.append(actionClass)
		provisioningRSpecs.append(rspec.query.provisioning)

	return provisioningRSpecs
コード例 #9
0
    def processProvisioning(provisioning):
		logging.debug("PROVISIONING STARTED...\n")
		for action in provisioning.action:
			actionModel = ActionController.ActionToModel(action,"provisioning")
			logging.debug("ACTION type: %s with id: %s" % (actionModel.type, actionModel.uuid))
			try:
				RuleTableManager.Evaluate(action,RuleTableManager.getDefaultName())
			except Exception as e:
				MAX_CHARS_ALLOWED = 200
				XmlRpcClient.callRPCMethod(threading.currentThread().callBackURL,"sendAsync",XmlHelper.craftXmlClass(XmlHelper.getProcessingResponse(Action.FAILED_STATUS, action,str(e)[0:MAX_CHARS_ALLOWED-1])))
				return None
			try:
				controller = VTDriver.getDriver(action.server.virtualization_type)
				#XXX:Change this when xml schema is updated
				server = VTDriver.getServerByUUID(action.server.uuid)
				#if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
				#	server = VTDriver.getServerByUUID(action.virtual_machine.server_id)
				#else:
				#	server = VTDriver.getVMbyUUID(action.virtual_machine.uuid).Server.get()
			except Exception as e:
				logging.error(e)
				raise e
			try:	
				#PROVISIONING CREATE
				if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
					try:
						vm = ProvisioningDispatcher.__createVM(controller, actionModel, action)
					except:
						vm = None
						raise
				#PROVISIONING DELETE, START, STOP, REBOOT
				else :
					ProvisioningDispatcher.__deleteStartStopRebootVM(controller, actionModel, action)
				XmlRpcClient.callRPCMethod(server.getAgentURL() ,"send", UrlUtils.getOwnCallbackURL(), 1, server.getAgentPassword(),XmlHelper.craftXmlClass(XmlHelper.getSimpleActionQuery(action)) )
				return
			except Exception as e:
				if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
					# If the VM creation was interrupted in the network
					# configuration, the created VM won't be returned
					try:
						if not vm:
							vm = controller.getVMbyUUID(action.server.virtual_machines[0].uuid)
						controller.deleteVM(vm)
						# Keep actions table up-to-date after each deletion
						actionModel.delete()
					except Exception as e:
						print "Could not delete VM. Exception: %s" % str(e)
				#XmlRpcClient.callRPCMethod(threading.currentThread().callBackURL,"sendAsync",XmlHelper.craftXmlClass(XmlHelper.getProcessingResponse(Action.FAILED_STATUS, action, str(e))))
		logging.debug("PROVISIONING FINISHED...")
コード例 #10
0
ファイル: VMcontroller.py プロジェクト: fp7-alien/C-BAS
    def processVMCreation(instance, server_id, slice, requestUser):

        if VM.objects.filter(sliceId = slice.uuid, name =instance.name):
            raise ValidationError("Another VM with name %s already exists in this slice. Please choose a new name" % instance.name)
        rspec = XmlHelper.getSimpleActionQuery()
        actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()

        instance.uuid = uuid.uuid4()
        instance.serverID = server_id
        instance.state = "on queue"
        instance.sliceId = slice.uuid
        instance.sliceName= slice.name

        #assign same virt technology as the server where vm created
        s = VTServer.objects.get(uuid = server_id)
        instance.virtTech = s.virtTech
        instance.projectId = slice.project.uuid
        instance.projectName = slice.project.name
        instance.aggregate_id = s.aggregate_id
        #assign parameters according to selected disc image
        #TODO get the rest of image choices! 
        if instance.disc_image == 'test':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "default/test/lenny"
        if instance.disc_image == 'default':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "default/default.tar.gz"
            instance.virtualization_setup_type = "paravirtualization"
        if instance.disc_image == 'legacy':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "legacy/legacy.tar.gz"
            instance.virtualization_setup_type = "paravirtualization"
        if instance.disc_image == 'irati':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '7.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "irati/irati.img"
            instance.virtualization_setup_type = "hvm"
        if instance.disc_image == 'spirent':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.2'
            instance.operatingSystemDistribution = 'CentOS'
            instance.hdOriginPath = "spirent/spirentSTCVM.img"
            instance.virtualization_setup_type = "hvm"
        if instance.disc_image == 'debian7':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '7.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "debian7/debian7.img"
            instance.virtualization_setup_type = "hvm"
        actionClass = copy.deepcopy(actionClassEmpty)
        actionClass.id = uuid.uuid4()
        Translator.VMmodelToClass(instance, actionClass.server.virtual_machines[0])
        server = VTServer.objects.get(uuid = server_id)
        actionClass.server.uuid = server_id
        actionClass.server.virtualization_type = server.getVirtTech()
        rspec.query.provisioning.action.append(actionClass)
         
        ServiceThread.startMethodInNewThread(ProvisioningDispatcher.processProvisioning,rspec.query.provisioning, requestUser)
コード例 #11
0
    def processVMCreation(instance, server_id, slice, requestUser):

        if VM.objects.filter(sliceId=slice.uuid, name=instance.name):
            raise ValidationError(
                "Another VM with name %s already exists in this slice. Please choose a new name"
                % instance.name)
        rspec = XmlHelper.getSimpleActionQuery()
        actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()

        instance.uuid = uuid.uuid4()
        instance.serverID = server_id
        instance.state = "on queue"
        instance.sliceId = slice.uuid
        instance.sliceName = slice.name

        #assign same virt technology as the server where vm created
        s = VTServer.objects.get(uuid=server_id)
        instance.virtTech = s.virtTech
        instance.projectId = slice.project.uuid
        instance.projectName = slice.project.name
        instance.aggregate_id = s.aggregate_id
        #assign parameters according to selected disc image
        #TODO get the rest of image choices!
        if instance.disc_image == 'test':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "default/test/lenny"
        if instance.disc_image == 'default':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "default/default.tar.gz"
            instance.virtualization_setup_type = "paravirtualization"
        if instance.disc_image == 'legacy':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "legacy/legacy.tar.gz"
            instance.virtualization_setup_type = "paravirtualization"
        if instance.disc_image == 'irati':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '7.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "irati/irati.img"
            instance.virtualization_setup_type = "hvm"
        if instance.disc_image == 'spirent':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '6.2'
            instance.operatingSystemDistribution = 'CentOS'
            instance.hdOriginPath = "spirentSTCVM/spirentSTCVM.img"
            instance.virtualization_setup_type = "hvm"
        if instance.disc_image == 'debian7':
            instance.operatingSystemType = 'GNU/Linux'
            instance.operatingSystemVersion = '7.0'
            instance.operatingSystemDistribution = 'Debian'
            instance.hdOriginPath = "debian7/debian7.img"
            instance.virtualization_setup_type = "hvm"
        actionClass = copy.deepcopy(actionClassEmpty)
        actionClass.id = uuid.uuid4()
        Translator.VMmodelToClass(instance,
                                  actionClass.server.virtual_machines[0])
        server = VTServer.objects.get(uuid=server_id)
        actionClass.server.uuid = server_id
        actionClass.server.virtualization_type = server.getVirtTech()
        rspec.query.provisioning.action.append(actionClass)

        ServiceThread.startMethodInNewThread(
            ProvisioningDispatcher.processProvisioning,
            rspec.query.provisioning, requestUser)
コード例 #12
0
    def processProvisioning(provisioning):

        logging.debug("PROVISIONING STARTED...\n")
        for action in provisioning.action:
            actionModel = ActionController.ActionToModel(
                action, "provisioning")
            logging.debug("ACTION type: %s with id: %s" %
                          (actionModel.type, actionModel.uuid))

            try:
                RuleTableManager.Evaluate(action,
                                          RuleTableManager.getDefaultName())
            except Exception as e:
                a = str(e)
                if len(a) > 200:
                    a = a[0:199]

                XmlRpcClient.callRPCMethod(
                    threading.currentThread().callBackURL, "sendAsync",
                    XmlHelper.craftXmlClass(
                        XmlHelper.getProcessingResponse(
                            Action.FAILED_STATUS, action, a)))
                #				XmlRpcClient.callRPCMethod(threading.currentThread().callBackURL,"sendAsync",XmlHelper.craftXmlClass(XmlHelper.getProcessingResponse('FAILED', action, 'You requested more than the 128Mbytes allowed for your project')))
                return None
            try:

                controller = VTDriver.getDriver(
                    action.server.virtualization_type)

                #XXX:Change this when xml schema is updated
                server = VTDriver.getServerByUUID(action.server.uuid)
                #if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
                #	server = VTDriver.getServerByUUID(action.virtual_machine.server_id)
                #else:
                #	server = VTDriver.getVMbyUUID(action.virtual_machine.uuid).Server.get()
            except Exception as e:
                logging.error(e)
                raise e

            try:
                #PROVISIONING CREATE
                if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
                    try:
                        vm = ProvisioningDispatcher.__createVM(
                            controller, actionModel, action)
                    except:
                        vm = None
                        raise
                #PROVISIONING DELETE, START, STOP, REBOOT

                else:

                    ProvisioningDispatcher.__deleteStartStopRebootVM(
                        controller, actionModel, action)

                XmlRpcClient.callRPCMethod(
                    server.getAgentURL(), "send", UrlUtils.getOwnCallbackURL(),
                    1, server.getAgentPassword(),
                    XmlHelper.craftXmlClass(
                        XmlHelper.getSimpleActionQuery(action)))
            except Exception as e:
                if actionModel.getType(
                ) == Action.PROVISIONING_VM_CREATE_TYPE and vm:
                    controller.deleteVM(vm)
                XmlRpcClient.callRPCMethod(
                    threading.currentThread().callBackURL, "sendAsync",
                    XmlHelper.craftXmlClass(
                        XmlHelper.getProcessingResponse(
                            Action.FAILED_STATUS, action, str(e))))

        logging.debug("PROVISIONING FINISHED...")
コード例 #13
0
    def prepare_vm_class(self):
        rspec = XmlHelper.getSimpleActionQuery()
	actionClassEmpty = copy.deepcopy(rspec.query.provisioning.action[0])
        actionClassEmpty.type_ = "create"
        rspec.query.provisioning.action.pop()
        return actionClassEmpty.server.virtual_machines[0]
コード例 #14
0
    def processProvisioning(provisioning):
		logging.debug("PROVISIONING STARTED...\n")
		for action in provisioning.action:
			actionModel = ActionController.ActionToModel(action,"provisioning")
			logging.debug("ACTION type: %s with id: %s" % (actionModel.type, actionModel.uuid))
			try:
				RuleTableManager.Evaluate(action,RuleTableManager.getDefaultName())
			except Exception as e:
				MAX_CHARS_ALLOWED = 200
				XmlRpcClient.callRPCMethod(threading.currentThread().callBackURL,"sendAsync",XmlHelper.craftXmlClass(XmlHelper.getProcessingResponse(Action.FAILED_STATUS, action,str(e)[0:MAX_CHARS_ALLOWED-1])))
				return None
			try:
				controller = VTDriver.getDriver(action.server.virtualization_type)
				#XXX:Change this when xml schema is updated
				server = VTDriver.getServerByUUID(action.server.uuid)
				#if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
				#	server = VTDriver.getServerByUUID(action.virtual_machine.server_id)
				#else:
				#	server = VTDriver.getVMbyUUID(action.virtual_machine.uuid).Server.get()
			except Exception as e:
				logging.error(e)
				raise e
			try:	
				#PROVISIONING CREATE
				if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
					try:
						vm = ProvisioningDispatcher.__createVM(controller, actionModel, action)
					except:
						vm = None
						raise
				#PROVISIONING DELETE, START, STOP, REBOOT
				else :
					ProvisioningDispatcher.__deleteStartStopRebootVM(controller, actionModel, action)
				XmlRpcClient.callRPCMethod(server.getAgentURL() ,"send", UrlUtils.getOwnCallbackURL(), 1, server.getAgentPassword(),XmlHelper.craftXmlClass(XmlHelper.getSimpleActionQuery(action)) )
				return
			except Exception as e:
				if actionModel.getType() == Action.PROVISIONING_VM_CREATE_TYPE:
					# If the VM creation was interrupted in the network
					# configuration, the created VM won't be returned
					try:
						if not vm:
							vm = controller.getVMbyUUID(action.server.virtual_machines[0].uuid)
						controller.deleteVM(vm)
						# Keep actions table up-to-date after each deletion
						actionModel.delete()
					except Exception as e:
						print "Could not delete VM. Exception: %s" % str(e)
				#XmlRpcClient.callRPCMethod(threading.currentThread().callBackURL,"sendAsync",XmlHelper.craftXmlClass(XmlHelper.getProcessingResponse(Action.FAILED_STATUS, action, str(e))))
		logging.debug("PROVISIONING FINISHED...")