def reboot(vmName): try: #=================================================================== # Xend has a bug of reboot. If reboot vm too quick, xend return success # but actually it refused reboot (seen from log) # vmPath = successToMap(xen_get_vm_path(vmName))['path'] # raiseExceptionIfFail(reset_vm(vmPath)) #=================================================================== vmPath = OvmHost()._vmNameToPath(vmName) OvmVm.stop(vmName) raiseExceptionIfFail(start_vm(vmPath)) vncPort= successToMap(xen_get_vnc_port(vmName))['vnc_port'] logger.info(OvmVm.stop, "reboot vm %s, new vncPort is %s"%(vmName, vncPort)) return toGson({"vncPort":str(vncPort)}) except Exception, e: errmsg = fmt_err_msg(e) logger.error(OvmVm.reboot, errmsg) raise XmlRpcFault(toErrCode(OvmVm, OvmVm.reboot), errmsg)
def hddBoot(vm, vmPath): vmType = vm.type if vmType == "FROMCONFIGFILE": vmType = OvmVm()._getVmTypeFromConfigFile(vmPath) cfgDict = {} if vmType == "HVM": cfgDict['builder'] = "'hvm'" cfgDict['acpi'] = "1" cfgDict['apic'] = "1" cfgDict['device_model'] = "'/usr/lib/xen/bin/qemu-dm'" cfgDict['kernel'] = "'/usr/lib/xen/boot/hvmloader'" vifType = 'ioemu' else: cfgDict['bootloader'] = "'/usr/bin/pygrub'" vifType = 'netfront' cfgDict['name'] = "'%s'"%vm.name cfgDict['disk'] = "[]" cfgDict['vcpus'] = "''" cfgDict['memory'] = "''" cfgDict['on_crash'] = "'destroy'" cfgDict['on_reboot'] = "'restart'" cfgDict['vif'] = "[]" items = [] for k in cfgDict.keys(): item = " = ".join([k, cfgDict[k]]) items.append(item) vmSpec = "\n".join(items) vmCfg = open(join(vmPath, 'vm.cfg'), 'w') vmCfg.write(vmSpec) vmCfg.close() setVifsType(vm.vifs, vifType) raiseExceptionIfFail(xen_set_vcpus(vmPath, vm.cpuNum)) raiseExceptionIfFail(xen_set_memory(vmPath, BytesToM(vm.memory))) raiseExceptionIfFail(xen_add_disk(vmPath, vm.rootDisk.path, mode=vm.rootDisk.type)) vifs = [OvmVif.toXenString(v) for v in vm.vifs] for vif in vifs: raiseExceptionIfFail(xen_set_vifs(vmPath, vif)) for disk in vm.disks: raiseExceptionIfFail(xen_add_disk(vmPath, disk.path, mode=disk.type)) raiseExceptionIfFail(xen_set_vm_vnc_password(vmPath, "")) cfgFile = join(vmPath, 'vm.cfg') # only HVM supports attaching cdrom if vmType == 'HVM': # Add an empty "hdc:cdrom" entry in config. Fisrt we set boot order to 'd' that is cdrom boot, # then 'hdc:cdrom' entry will be in disk list. Second, change boot order to 'c' which # is harddisk boot. VM can not start with an empty 'hdc:cdrom' when boot order is 'd'. # it's tricky ! raiseExceptionIfFail(xen_config_boot_sequence(vmPath, 'd')) raiseExceptionIfFail(xen_config_boot_sequence(vmPath, 'c')) raiseExceptionIfFail(xen_correct_cfg(cfgFile, vmPath)) xen_correct_qos_cfg(cfgFile) dumpCfg(vm.name, cfgFile) server = successToMap(get_master_ip())['ip'] raiseExceptionIfFail(start_vm(vmPath, server)) rs = SUCC() return rs
def hddBoot(vm, vmPath): vmType = vm.type if vmType == "FROMCONFIGFILE": vmType = OvmVm()._getVmTypeFromConfigFile(vmPath) cfgDict = {} if vmType == "HVM": cfgDict['builder'] = "'hvm'" cfgDict['acpi'] = "1" cfgDict['apic'] = "1" cfgDict['device_model'] = "'/usr/lib/xen/bin/qemu-dm'" cfgDict['kernel'] = "'/usr/lib/xen/boot/hvmloader'" vifType = 'ioemu' else: cfgDict['bootloader'] = "'/usr/bin/pygrub'" vifType = 'netfront' cfgDict['name'] = "'%s'" % vm.name cfgDict['disk'] = "[]" cfgDict['vcpus'] = "''" cfgDict['memory'] = "''" cfgDict['on_crash'] = "'destroy'" cfgDict['on_reboot'] = "'restart'" cfgDict['vif'] = "[]" items = [] for k in cfgDict.keys(): item = " = ".join([k, cfgDict[k]]) items.append(item) vmSpec = "\n".join(items) vmCfg = open(join(vmPath, 'vm.cfg'), 'w') vmCfg.write(vmSpec) vmCfg.close() setVifsType(vm.vifs, vifType) raiseExceptionIfFail(xen_set_vcpus(vmPath, vm.cpuNum)) raiseExceptionIfFail(xen_set_memory(vmPath, BytesToM(vm.memory))) raiseExceptionIfFail( xen_add_disk(vmPath, vm.rootDisk.path, mode=vm.rootDisk.type)) vifs = [OvmVif.toXenString(v) for v in vm.vifs] for vif in vifs: raiseExceptionIfFail(xen_set_vifs(vmPath, vif)) for disk in vm.disks: raiseExceptionIfFail( xen_add_disk(vmPath, disk.path, mode=disk.type)) raiseExceptionIfFail(xen_set_vm_vnc_password(vmPath, "")) cfgFile = join(vmPath, 'vm.cfg') # only HVM supports attaching cdrom if vmType == 'HVM': # Add an empty "hdc:cdrom" entry in config. Fisrt we set boot order to 'd' that is cdrom boot, # then 'hdc:cdrom' entry will be in disk list. Second, change boot order to 'c' which # is harddisk boot. VM can not start with an empty 'hdc:cdrom' when boot order is 'd'. # it's tricky ! raiseExceptionIfFail(xen_config_boot_sequence(vmPath, 'd')) raiseExceptionIfFail(xen_config_boot_sequence(vmPath, 'c')) raiseExceptionIfFail(xen_correct_cfg(cfgFile, vmPath)) xen_correct_qos_cfg(cfgFile) dumpCfg(vm.name, cfgFile) server = successToMap(get_master_ip())['ip'] raiseExceptionIfFail(start_vm(vmPath, server)) rs = SUCC() return rs