def startDomain(vm): KVMManager.logger.info('startDomain ' + vm.name) # Getting connection conn = KVMManager.__getConnection() with open(HdManager.getConfigFilePath(vm), 'r') as openConfig: xmlConf = openConfig.read() if KVMManager.isVmRunning(vm.name) and not KVMManager.isVmRunningByUUID(vm.uuid): # Duplicated name; trying to find an Alias newVmName = KVMManager.__findAliasForDuplicatedVmName(vm) xmlConf.replace("<name>"+ vm.name + "<\/name>", "<name>"+ newVmName + "<\/name>", 1) KVMManager.logger.warn("duplicate VM name, change VM name from " + vm.name + " to " + newVmName) try: # Try first using libvirt call KVMManager.logger.info('creating vm using python-libvirt methods') KVMManager.logger.info(xmlConf) conn.createXML(xmlConf, 0) KVMManager.logger.info(KVMManager.sanitize_arg(HdManager.getConfigFilePath(vm))) KVMManager.logger.info('created vm') # raise Exception("Skip") #otherwise stop is ridiculously slow except Exception as e: KVMManager.logger.error(str(e)) KVMManager.logger.error(traceback.format_exc()) raise Exception(e) time.sleep(OXA_KVM_CREATE_WAIT_TIME) if not KVMManager.isVmRunningByUUID(vm.uuid): # Complete with other types of exceptions raise Exception("Could not start VM, abort") return
def hardStopVM(vmid, vm): try: # First stop domain KVMManager.stopDomain(vm) HdManager.stopHook(vm) KVMProvisioningDispatcher.logger.info("VM named " + vm.name + " has been stopped.") # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "SUCCESS", "") except Exception as e: KVMProvisioningDispatcher.logger.error(str(e)) # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "FAILED", str(e)) return
def rebootVM(vmid, vm): try: # Just try to reboot HdManager.rebootHook(vm) KVMManager.rebootDomain(vm) KVMProvisioningDispatcher.logger.info("VM named " + vm.name + " has been rebooted.") # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "SUCCESS", "") except Exception as e: KVMProvisioningDispatcher.logger.error(str(e)) # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "FAILED", str(e)) return
def __createConfigFile(vm, env): template_name = "kvm.template.xml" template = env.get_template(template_name) # Set vars&render output = template.render(vm_name=vm.name, vm_uuid=vm.uuid, vm_memory=vm.xen_configuration.memory_mb, vm_cpu=str(1), vm_imgfile=HdManager.getHdPath(vm), vm=vm) # write file cfile = open(HdManager.getConfigFilePath(vm), 'w') cfile.write(output) cfile.close()
def __createConfigFile(vm,env): template_name = "spirentSTCVMTemplate.pt" template = env.get_template(template_name) #Set vars&render output = template.render( kernelImg=OXA_KVM_SERVER_KERNEL, initrdImg=OXA_KVM_SERVER_INITRD, hdFilePath=HdManager.getHdPath(vm), #swapFilePath=HdManager.getSwapPath(vm), vm=vm) #write file cfile = open(HdManager.getConfigFilePath(vm),'w') cfile.write(output) cfile.close()
def startVM(vmid, vm): KVMProvisioningDispatcher.logger.info("XXX startVM start") try: # Trigger HdManager.startHook(vm) KVMManager.startDomain(vm) KVMProvisioningDispatcher.logger.info("VM named " + vm.name + " has been started.") # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "SUCCESS", "") except Exception as e: KVMProvisioningDispatcher.logger.error(str(e)) # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "FAILED", str(e)) KVMProvisioningDispatcher.logger.info("XXX startVM end") return
def deleteVM(vmid, vm): try: try: # if it wasn't stopped, do it KVMManager.stopDomain(vm) except Exception as e: pass # Trigger Hd Deletion in Remote HdManager.delete(vm) # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "SUCCESS", "") except Exception as e: KVMProvisioningDispatcher.logger.error(str(e)) KVMProvisioningDispatcher.logger.exception("XXX") # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "FAILED", str(e)) return
def __createHVMFileHdConfigFile(vm,env): template_name = "mediacatHVMFileHd.pt" template = env.get_template(template_name) #Set vars&render output = template.render( kernelImg=OXA_KVM_SERVER_KERNEL, initrdImg=OXA_KVM_SERVER_INITRD, vm=vm) #write file cfile = open(HdManager.getConfigFilePath(vm),'w') cfile.write(output) cfile.close()
def createVMfromImage(vmid, vm): KVMProvisioningDispatcher.logger.info("XXX createVMfromImage start") pathToMountPoint = "" KVMProvisioningDispatcher.logger.info("Initiating creation process for VM: " + vm.name + " under project: " + vm.project_id + " and slice: " + vm.slice_id) try: # Clone HD HdManager.clone(vm) KVMProvisioningDispatcher.logger.debug("HD cloned successfully...") # Mount copy pathToMountPoint = HdManager.mount(vm) KVMProvisioningDispatcher.logger.debug("Mounting at: " + pathToMountPoint) KVMProvisioningDispatcher.logger.debug("HD mounted successfully...") # Configure VM OS VMConfigurator.configureVmDisk(vm, pathToMountPoint) # Umount copy HdManager.umount(vm, pathToMountPoint) KVMProvisioningDispatcher.logger.debug("HD unmounted successfully...") # Synthesize config file VMConfigurator.createVmConfigurationFile(vm) KVMProvisioningDispatcher.logger.debug("KVM configuration file created successfully...") KVMProvisioningDispatcher.logger.info("Creation of VM " + vm.name + " has been successful!!") # Send async notification XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "SUCCESS", "") except Exception as e: KVMProvisioningDispatcher.logger.error(str(e)) KVMProvisioningDispatcher.logger.error(traceback.format_exc()) # Send async notification try: HdManager.umount(vm, pathToMountPoint) except: pass try: # Delete VM disc and conf file if the error is not due because # the VM already exists if not isinstance(e, VMalreadyExists): KVMProvisioningDispatcher.deleteVM(vmid, vm) except: pass XmlRpcClient.sendAsyncProvisioningActionStatus(vmid, "FAILED", str(e)) KVMProvisioningDispatcher.logger.info("XXX createVMfromImage end") return