def vmware_create( _WorkingDirectory, _DestinationDirectory, _StartUpFile=None, _NewVmx="default.vmx", _NewVmdk="default.vmdk", _CloneMachine=True, ): _Vmx, _Vmdk = find_files(_WorkingDirectory) _VirtualMachine = vm(_WorkingDirectory, _Vmx, _Vmdk, _StartUpFile, True, True) _Vmx = _NewVmx _Vmdk = _NewVmdk if _CloneMachine: _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, False, False) else: _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, True, True) _ClonedMachine.set_function(vmware_entry_point) # increasing machine count ** need to lock ** _Lock.acquire() _MachineCount.value = _MachineCount.value + 1 _Lock.release() # synchronize finished if _CloneMachine: clone_vm(_VirtualMachine, _ClonedMachine) else: _ClonedMachine._m_disk_file = find_snapshot(_ClonedMachine) _CollectionNumber = get_number() _Command = ( "mkdir " + '"' + "/home/jarret/Virtual Machines/collected/virtual_machine" + str(_CollectionNumber) + '"' ) _ClonedMachine._m_collection = "/home/jarret/Virtual Machines/collected/virtual_machine" + str( _CollectionNumber ) print _Command os.system(_Command) _ClonedMachine() # if the machine is created then just run it return _ClonedMachine
def task_modify(self, task_item): vm_name = task_item.data['vm_name'] memory = task_item.data['mem'] cpu_num = task_item.data['cpu'] has_error = False new_xml = None avm = vm(vm_name) new_xml = avm.change_memory(int(memory)/1024) if new_xml is None: has_error = True logger.error("change_memory faild") new_xml = avm.change_cur_cpu_number(cpu_num) if new_xml is None: has_error = True logger.error("change_cur_cpu_number failed") ret = avm.extend_img(task_item) if ret == False: has_error = True logger.error("extend_img failed") logger.debug("new_xml = \n%s" % new_xml) if has_error: return {"status_code": -1, "msg":"error"} else: return avm.edit_conf(new_xml) pass
def task_restore_snapshot(self, task_item): vm_name = task_item.data['vm_name'] snapshot_name = task_item.data['snapshot_name'] avm = vm(vm_name) result = avm.restore_snapshot(snapshot_name) return result
def task_delete(self, task_item): vm_name = task_item.data['vm_name'] delete_disk = task_item.data['delete_disk'] avm = vm(vm_name) if delete_disk == 1: avm.delete_img() avm.destroy() result = avm.undefine() return result
def wait_for_startup_complete(self, task_item): """ wait for vm setting up os """ vm_name = task_item.data['vm_name'] install_method = task_item.data['install_method'] avm = vm(vm_name) if install_method == 0: #iso new_xml = avm.change_boot_type('cdrom') avm.edit_conf(new_xml) #start result = avm.start() if result['status_code'] == -1: return result new_xml = avm.change_boot_type('hd') avm.edit_conf(new_xml) check_cmd = 'virsh qemu-agent-command %s \'{"execute":"guest-ping"}\' ' % vm_name ok_result = '{"return":{}}\n' timeout = 1800 while task_item.consuming < timeout : #waiting task_item.consuming = int(time.time() - self.begin_handle_time) cmd_result = commands.getoutput(check_cmd) if cmd_result == ok_result: break time.sleep(10) if task_item.consuming >= timeout: avm.destroy() avm.undefine() status_code = -1 msg = "timeout" else: status_code = 0 msg = "OK" ret = {} ret["status_code"] = status_code ret["msg"] = str(msg) return ret
def task_define(self, task_item): vm_name = task_item.data['vm_name'] memory = task_item.data['memory'] cpu_num = task_item.data['cpu_num'] os_size = task_item.data['disk_os'] data_size = task_item.data['disk_data'] install_method = task_item.data['install_method'] vm_file = os.path.basename(task_item.data['vm_file']) has_delete = 0 avm = vm(vm_name) if avm.xml != "": #vm is already exist avm.destroy() avm.undefine() has_delete = 1 root = construct_vm_xml(vm_name, memory, cpu_num) os_path,disk_list = vm.prepare_img(task_item) i = 1 c_hd_xml = hd_xml("file", os_path, i) root.find('devices').append(c_hd_xml.tree) for disk_path in disk_list: i += 1 c_hd_xml = hd_xml("file", disk_path, i) root.find('devices').append(c_hd_xml.tree) if install_method == 0: #mount iso c_cdrom_xml = cdrom_xml('file', constants.iso_path + '/' + vm_file, i+1) if c_cdrom_xml is not None: root.find('devices').append(c_cdrom_xml.tree) result = vm.define(name = vm_name, xml = ET.tostring(root)) if result['status_code'] == 0: result = self.wait_for_startup_complete(task_item) if has_delete == 1: result['msg'] = "Attention: have deleted an existed vm!! " + result['msg'] return result #self.task_done(task_item, result) pass
def create_new_dev(self, tname, name, override, did=-1, vcpu=0, mem=0, vif_prefix=None, VCPUs_params=None): if did == -1: did = self.get_new_id() template = self.template_dict[tname] node = vm(self.session, did, template, name, vif_prefix=vif_prefix) if override: node.set_fixed_VCPUs(self.session, vcpu) node.set_memory(self.session, mem) self.node_list[did] = node self.dev_set.add(did) if VCPUs_params: node.set_VCPUs_params_dict(self.session, VCPUs_params) return node
def task_action(self, task_item): vm_name = task_item.data['vm_name'] action = task_item.data['action'] result = None avm = vm(vm_name) if action == "start": if task_item.data.has_key('boot_type'): #change boot type boot_type = '' if task_item['boot_type'] == 0: boot_type = 'cdrom' elif task_item['boot_type'] == 1: boot_type = 'hd' else: logger.error("invalid boot_type : %d" % task_item['boot_type']) boot_type = 'hd' new_xml = avm.change_boot_type(boot_type) result = avm.edit_conf(new_xml) if result['status_code'] == -1: return result result = avm.start() return result elif action == "stop": result = avm.destroy() return result elif action == "reboot": result = avm.destroy() if result['status_code'] == -1: return result result = avm.start() return result else: return {"status_code": -1, "msg":"invalid action: %s" % action} pass
def task_set_ip(self, task_item): vm_name = task_item.data['vm_name'] bootproto = task_item.data['bootproto'] nic_name = task_item.data['nic_name'] content = """DEVICE=%s\nTYPE=Ethernet\nNAME=%s\nONBOOT=yes\nBOOTPROTO=%s\n""" % (nic_name, nic_name, bootproto) if bootproto == "static": ip = task_item.data['ip'] netmask = task_item.data['netmask'] gateway = task_item.data['gateway'] dns = task_item.data['dns'] content = content + "IPADDR=%s\nNETMASK=%s\nGATEWAY=%s\nDNS3=%s\n"%(ip, netmask, gateway, dns) elif bootproto == "dhcp": pass else: logger.error("invalid nic type: %s" % bootproto) return {"status_code": -1, "msg":"invalid nic type"} path = "/etc/sysconfig/network-scripts/ifcfg-%s"%nic_name avm = vm(vm_name) ret_count = avm.write_vm_file(path, content) if ret_count <=0: return {"status_code": -1, "msg":"error"} else: ret = avm.shutdown() time.sleep(10) i = 0 while i < 5: i += 1 run_status = avm.get_status() if run_status['vm_status'] == constants.vm_status_shutoff: break time.sleep(10) if i == 5: avm.destroy() ret = avm.start() return ret
import os,sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from vm import vm a = vm() ret = a.start_from_cdrom("qemu:///system", "vm_name1", "cdrom_name1") print ret
"type": 1, "vm_name": "xingyu", "formula": "", "topology" : { "cpu" : 1, "disk" : 1}, "cpu_num":2, "memory":512000000, "disk_os":30, "disk_data":100, "install_method": 1, "vm_file": "/home/iso/centos6.7-for-xingyu.iso", "father_id": 1, "uri":"http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso", "save_path":"/home/", "md5": "111", } import os,sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from vm import vm from host import vmmhost import task a = vm("cds") #a.write_vm_file("/etc/sysconfig/network-scripts/ifcfg-bond0", "aaaaa") tm = task.task_manager() ctask = task.task(task_dict) tm.task_set_ip(ctask)
import os,sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from vm import vm a = vm('cds') ret = a.get_info() print ret
import os,sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from vm import vm import libvirt a = vm('cds') conn = libvirt.open("qemu:///system") ret = a.get_os_version() print ret
except Exception, e: logger.exception(e) ret_dict = {} ret_dict['req'] = "vm.conf" ret_dict['sn'] = sn doms_info = [] chost = vmmhost(sn, conn) now_time = get_now_str() for name in chost.get_vmlist(): dom_info = {} dom_info['name'] = name dom_info['update_time'] = now_time dom_info['type'] = 0 avm = vm(name) dom_info['os'] = avm.get_os_version() #todo: lsb_release -d dom_info['cpu_num'] = avm.get_cpu_num() dom_info['memory'] = avm.get_mem() dom_info['disk'] = avm.get_disk_info() dom_info['network'] = avm.get_net_info() snapshot_list = avm.get_snapshots() snapshot_list_info = [] for item in snapshot_list: snap_item = {} snap_item['name'] = item snap_item['create_time'] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #todo snap_item['comment'] = "xxxx" snapshot_list_info.append(snap_item) dom_info['snapshots'] = snapshot_list_info
import os,sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from vm import vm a = vm('aaa') print a.xml if a.xml == "": print "11" else: print "22"
import os, sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parentdir) import os, sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parentdir) from vm import vm a = vm() ret = a.destroy("qemu:///system", sys.argv[1]) print ret
"topology": { "cpu": 1, "disk": 1 }, "cpu_num": 2, "memory": 512000000, "disk_os": 30, "disk_data": 100, "install_method": 1, "vm_file": "/home/iso/centos6.7-for-xingyu.iso", "father_id": 1, "uri": "http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso", "save_path": "/home/", "md5": "111", } import os, sys parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, parentdir) from vm import vm from host import vmmhost import task a = vm("cds") tm = task.task_manager() ctask = task.task(task_dict) tm.task_action(ctask)
def vmware_create(_WorkingDirectory, _DestinationDirectory, _StartUpFile = None, _NewVmx = "default.vmx", _NewVmdk = "default.vmdk", _CloneMachine = True, _ContinueNumber = 0, _Gui = True): _Vmx, _Vmdk = find_files(_WorkingDirectory) _VirtualMachine = vm(_WorkingDirectory, _Vmx, _Vmdk, _StartUpFile, True, True, _ContinueNumber, _Gui) _Vmx = _NewVmx _Vmdk = _NewVmdk if _CloneMachine: _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, False, False, _VirtualMachine._m_continue, _Gui) else: _ClonedMachine = vm(_DestinationDirectory, _Vmx, _Vmdk, _StartUpFile, True, True, _VirtualMachine._m_continue, _Gui) _ClonedMachine.set_function(vmware_entry_point) # increasing machine count ** need to lock ** _Lock.acquire() _MachineCount.value = _MachineCount.value + 1 _Lock.release() # synchronize finished if _CloneMachine: _ContinueThread = heavy_thread(continue_execution, (_ClonedMachine, None, True, _VirtualMachine,)) _ThreadList.append(_ContinueThread) _ContinueThread.start() else: _ClonedMachine._m_disk_file = find_snapshot(_ClonedMachine) _Url = get_url() if _Url is None: return _DirUrl = _Url[7:] if (_Shelve.has_key(_DirUrl)): while(_Shelve.has_key(_DirUrl)): _Url = get_url() _DirUrl = _Url[7:] _SavedUrl = _DirUrl _DirUrl = _DirUrl.replace("/", "_") _DirUrl = _DirUrl.replace(".", "_") _Shelve[_SavedUrl] = _DirUrl _DirCommand = "sudo mkdir " + "\"" + "/media/hdd0/Virtual Machines/collected/" + _DirUrl + "\"" _ClonedMachine._m_collection = "/media/hdd0/Virtual Machines/collected/" + _DirUrl _ClonedMachine._m_url = _Url print _DirCommand os.system(_DirCommand) _Thread = heavy_thread(continue_execution, (_ClonedMachine, None, False,)) _ThreadList.append(_Thread) _Thread.start() return _ClonedMachine
import os,sys import libvirt parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0,parentdir) from host import vmmhost from vm import vm cvm = vm() conn = libvirt.open("qemu:///system") chost = vmmhost('123123', conn) ret = chost.download_res("http://download.microsoft.com/download/B/8/9/B898E46E-CBAE-4045-A8E2-2D33DD36F3C4/vs2015.pro_chs.iso", "123","/home/louzhengwei/test/sdb2/iso/" ) print ret #print ret
import vm dd = vm.vm() dfdf = vm.vm() dfdff = vm.vm() ddd = vm.vm() print(ddd.vm_id)