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
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
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
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
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
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
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)
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
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...")
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)
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)
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...")
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]