def updateVMinstance(host=None): if host is None: serverList = VmServer.objects.all() for server in serverList: if server.status == 0: VMS = LibvirtManage(server.server_ip,server.username, server.passwd, server.vm_type,pool=False) SERVER = VMS.genre(model='server') if SERVER: dataList = SERVER.getVmInstanceBaseInfo(server_ip=server.server_ip,server_id=server.id) for ds in dataList: ipaddress = '' for ip in ds.get('ip'): for k,v in ip.items(): ips = k + ':' + v.get('addr') + '/' + str(v.get('prefix')) ipaddress = ips + '\n' + ipaddress result = VmServerInstance.objects.filter(server=server,name=ds.get('name')) if result:VmServerInstance.objects.filter(server=server,name=ds.get('name')).update(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),status=ds.get('status'), name=ds.get('name'),token=ds.get('token'), vnc=ds.get('vnc'),ips=ipaddress) else:VmServerInstance.objects.create(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),vnc=ds.get('vnc'), status=ds.get('status'),name=ds.get('name'), token=ds.get('token'),ips=ipaddress) VMS.close() else: server = VmServer.objects.get(server_ip=host) if server and server.status == 0: VMS = LibvirtManage(server.server_ip,server.username, server.passwd, server.vm_type,pool=False) SERVER = VMS.genre(model='server') if SERVER: dataList = SERVER.getVmInstanceBaseInfo(server_ip=server.server_ip,server_id=server.id) for ds in dataList: ipaddress = '' for ip in ds.get('ip'): for k,v in ip.items(): ips = k + ':' + v.get('addr') + '/' + str(v.get('prefix')) ipaddress = ips + '\n' + ipaddress result = VmServerInstance.objects.filter(server=server,name=ds.get('name')) if result:VmServerInstance.objects.filter(server=server,name=ds.get('name')).update(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),vnc=ds.get('vnc'), status=ds.get('status'),name=ds.get('name'), token=ds.get('token'),ips=ipaddress) else:VmServerInstance.objects.create(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),status=ds.get('status'), name=ds.get('name'),token=ds.get('token'), vnc=ds.get('vnc'),ips=ipaddress) VMS.close()
def handleNetwork(request): if request.method == "POST": op = request.POST.get('op') server_id = request.POST.get('server_id') netkName = request.POST.get('netkName') if op in ['delete'] and request.user.has_perm('VManagePlatform.change_vmserverinstance'): try: vmServer = VMServer.selectOneHost(id=server_id) except: return JsonResponse({"code":500,"data":None,"msg":"主机不存在。"}) try: VMS = LibvirtManage(uri=vmServer.uri) SSH = BRManage(hostname=vmServer.server_ip,port=22) OVS = SSH.genre(model='ovs') BRCTL = SSH.genre(model='brctl') except Exception,e: return JsonResponse({"code":500,"msg":"服务器连接失败。。","data":e}) try: NETWORK = VMS.genre(model='network') netk = NETWORK.getNetwork(netk_name=netkName) if op == 'delete': try: if netkName.startswith('ovs'):OVS.ovsDelBr(brName=netkName) elif netkName.startswith('br'): BRCTL.brctlDownBr(brName=netkName) # BRCTL.brctlDelBr(brName=netkName) SSH.close() except: pass status = NETWORK.deleteNetwork(netk) VMS.close() if status == 0:return JsonResponse({"code":200,"data":None,"msg":"网络删除成功"}) else:return JsonResponse({"code":500,"data":None,"msg":"网络删除失败"}) except Exception,e: return JsonResponse({"code":500,"msg":"获取网络失败。","data":e})
def revertSnapShot(data, user): try: vMserver = VmServer.objects.get(id=data.get('server_id')) VMS = LibvirtManage(vMserver.server_ip, vMserver.username, vMserver.passwd, vMserver.vm_type, pool=False) INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(data.get('vm_name'))) status = INSTANCE.revertSnapShot(instance, data.get('snap_name')) VMS.close() if isinstance(status, int): VmLogs.objects.create(server_id=data.get('server_id'), vm_name=data.get('vm_name'), content="虚拟机{name}恢复快照{snap}".format( name=data.get('vm_name'), snap=data.get('snap_name')), user=user, status=0, isRead=0) else: VmLogs.objects.create(server_id=data.get('server_id'), vm_name=data.get('vm_name'), content="虚拟机{name}恢复快照{snap}".format( name=data.get('vm_name'), snap=data.get('snap_name')), user=user, status=1, isRead=0, result=status) except Exception, e: return e
def listStorage(request): if request.method == "GET": vMserverId = request.GET.get('id') vmServer = VMServer.selectOneHost(id=vMserverId) try: VMS = LibvirtManage(uri=vmServer.uri) SERVER = VMS.genre(model='server') if SERVER: storageList = SERVER.getVmStorageInfo() VMS.close() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except Exception, e: return render_to_response('404.html', context_instance=RequestContext(request)) return render_to_response('vmStorage/list_storage.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "存储池管理", "url": "/listStorage/?id=%d" % vmServer.id }], "vmServer": vmServer, "storageList": storageList }, context_instance=RequestContext(request))
def instanceNetStatus(request, id, vm): """ Return instance network flow usage """ vmServer = VmServer.objects.get(id=id) try: VMS = LibvirtManage(vmServer.server_ip, vmServer.username, vmServer.passwd, vmServer.vm_type) INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(vm)) netFlow = INSTANCE.getNetUsage(instance) rx = 0 tx = 0 for dev in netFlow: rx += dev.get('rx') tx += dev.get('tx') data = dict() data['ctime'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) data['net'] = { 'in': int(tx / 1024) / 1024, 'out': int(rx / 1024) / 1024 } #{'in':random.randint(50,100),'out':random.randint(50,100)} return JsonResponse({"code": 200, "data": data, "msg": None}) # except Exception, e: return JsonResponse({ "code": 200, "data": { 'ctime': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), "net": { "rt": 0, "tx": 0 } }, "msg": str(e) })
def instanceDiskStatus(request, id, vm): """ Return instance disk usage """ vmServer = VmServer.objects.get(id=id) try: VMS = LibvirtManage(vmServer.server_ip, vmServer.username, vmServer.passwd, vmServer.vm_type) INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(vm)) diskUsage = INSTANCE.getDiskUsage(instance) rd = 0 wr = 0 for dev in diskUsage: rd += dev.get('rd') wr += dev.get('wr') data = dict() data['ctime'] = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) data['disk'] = { 'rd': int(rd / 1024) / 1024, 'wr': int(wr / 1024) / 1024 } #{'in':random.randint(50,100),'out':random.randint(50,100)} return JsonResponse({"code": 200, "data": data, "msg": None}) # except Exception, e: return JsonResponse({ "code": 200, "data": { 'ctime': time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()), "disk": { "rd": 0, "wr": 0 } }, "msg": str(e) })
def configNetwork(request): if request.method == "GET": vmServerId = request.GET.get('id') vmServer = VMServer.selectOneHost(id=vmServerId) try: VMS = LibvirtManage(uri=vmServer.uri) NETWORK = VMS.genre(model='network') if NETWORK: netList = NETWORK.listNetwork() insList = NETWORK.listInterface() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except Exception, e: netList = None return render_to_response('vmNetwork/add_network.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "网络管理", "url": '/addNetwork' }], "vmServer": vmServer, "netList": netList, "insList": insList }, context_instance=RequestContext(request))
def checkVMinstance(): '''检查所有宿主机上面的实例,如果不存在的实例则从数据库里面清除掉''' serverList = VmServer.objects.all() for server in serverList: if server.status == 0: VMS = LibvirtManage(server.server_ip, server.username, server.passwd, server.vm_type, pool=False) SERVER = VMS.genre(model='server') vList = SERVER.getAllInstance() try: vmList = [ str(vm.token) for vm in VmServerInstance.objects.filter( server=server).all() ] except Exception, ex: print ex delVmList = list(set(vmList).difference(set(vList))) for v in delVmList: try: vm = VmServerInstance.objects.filter(server=server, token=v) vm.delete() except Exception, ex: print ex if SERVER: VMS.close()
def checkVMinstance(): '''Check all instances on the host machine, and if it does not exist, remove it from the database''' serverList = VmServer.objects.all() for server in serverList: if server.status == 0: VMS = LibvirtManage(server.server_ip, server.username, server.passwd, server.vm_type, pool=False) SERVER = VMS.genre(model='server') vList = SERVER.getAllInstance() try: vmList = [ str(vm.token) for vm in VmServerInstance.objects.filter( server=server).all() ] except Exception, ex: print ex delVmList = list(set(vmList).difference(set(vList))) for v in delVmList: try: vm = VmServerInstance.objects.filter(server=server, token=v) vm.delete() except Exception, ex: print ex if SERVER: VMS.close()
def updateVMserver(): serverList = VmServer.objects.all() for server in serverList: VMS = LibvirtManage(server.server_ip, server.username, server.passwd, server.vm_type, pool=False) SERVER = VMS.genre(model='server') if SERVER: if server.status == 0: data = SERVER.getVmServerInfo() try: VmServer.objects.filter(id=server.id).update( instance=data.get('ins'), mem=data.get('mem'), cpu_total=data.get('cpu_total')) VMS.close() except Exception, e: return e elif server.status == 1: try: VmServer.objects.filter(id=server.id).update(status=0) except Exception, e: return e
def viewVmServer(request, id): try: vServer = VmServer.objects.get(id=id) except: return render_to_response('404.html', context_instance=RequestContext(request)) VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) SERVER = VMS.genre(model='server') if SERVER: vmServer = SERVER.getVmServerInfo() else: return render_to_response('404.html', context_instance=RequestContext(request)) if vmServer: vmServer['id'] = vServer.id vmServer['server_ip'] = vServer.server_ip vmServer['name'] = vServer.hostname vmStorage = SERVER.getVmStorageInfo() vmInstance = SERVER.getVmInstanceInfo(server_ip=vServer.server_ip) vmIns = vmInstance.get('active').get('number') + vmInstance.get( 'inactice').get('number') vmInsList = [] for vm in vmIns: vm['netk'] = ','.join(vm.get('netk')) vm['disk'] = vm.get('disks') vm.pop('disks') vmInsList.append(vm) VMS.close() return render_to_response('vmServer/index_server.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机管理器", "url": '#' }, { "name": "宿主机列表", "url": "/listServer" }, { "name": vmServer.get('name'), "url": "/viewServer/%d/" % vServer.id }], "vmServer": vmServer, "model": "instance", "vmStorage": vmStorage, "vmInstance": vmInsList }, context_instance=RequestContext(request))
def viewVmServer(request, id): try: vServer = VmServer.objects.get(id=id) except: return render_to_response('404.html', context_instance=RequestContext(request)) ''' Kapali Host'a uygulamadan erisilmek istendiginde program kiriliyordu. Alttaki Host'a baglanirken try/except eklenmistir 2018-07-19''' try: VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) SERVER = VMS.genre(model='server') vmServer = SERVER.getVmServerInfo() except: return render_to_response('404.html', context_instance=RequestContext(request)) if vmServer: vmServer['id'] = vServer.id vmServer['server_ip'] = vServer.server_ip vmServer['name'] = vServer.hostname vmServer['mem'] = vmServer['mem'] / 1024 #GB Convertion vmStorage = SERVER.getVmStorageInfo() vmInstance = SERVER.getVmInstanceInfo(server_ip=vServer.server_ip) vmIns = vmInstance.get('active').get('number') + vmInstance.get( 'inactice').get('number') vmInsList = [] for vm in vmIns: vm['netk'] = ','.join(vm.get('netk')) vm['disk'] = vm.get('disks') vm.pop('disks') vmInsList.append(vm) VMS.close() return render_to_response('vmServer/index_server.html', { "user": request.user, "localtion": [{ "name": "Home", "url": '/' }, { "name": "Virtual Machine Manager", "url": '#' }, { "name": "Host list", "url": "/listServer" }, { "name": vmServer.get('name'), "url": "/viewServer/%d/" % vServer.id }], "vmServer": vmServer, "model": "instance", "vmStorage": vmStorage, "vmInstance": vmInsList }, context_instance=RequestContext(request))
def addStorage(request): if request.method == "POST" and request.user.has_perm( 'VManagePlatform.add_vmserverinstance'): pool_xml = StorageTypeXMLConfig( pool_type=request.POST.get('pool_type'), pool_name=request.POST.get('pool_name'), pool_spath=request.POST.get('pool_spath'), pool_tpath=request.POST.get('pool_tpath'), pool_host=request.POST.get('pool_host')) if pool_xml: try: vMserver = VMServer.selectOneHost( id=request.POST.get('pool_server')) try: VMS = LibvirtManage(uri=vMserver.uri) except: return JsonResponse({ "code": 500, "msg": "连接虚拟服务器失败。", "data": None }) STORAGE = VMS.genre(model='storage') pool = STORAGE.getStoragePool( pool_name=request.POST.get('pool_name')) if pool is False: storage = STORAGE.createStoragePool(pool_xml) VMS.close() if storage: return JsonResponse({ "code": 200, "msg": "存储池添加成功", "data": None }) else: return JsonResponse({ "code": 500, "msg": "创建存储池失败。", "data": None }) else: VMS.close() return JsonResponse({ "code": 400, "msg": "存储池已经存在。", "data": None }) except Exception, e: return JsonResponse({"code": 500, "msg": "找到主机资源", "data": e}) else: return JsonResponse({ "code": 500, "msg": "不支持的存储类型或者您没有权限操作此项", "data": None })
def listVmServer(request): ''' Host'larin CPU,RAM,INSTANCE, STATUS degerleri dogru alinamadigindan yeniden yazilmis ve hatalar giderilmistir 2018-07-19 ''' hostList = VmServer.objects.all().order_by("-id") count = 0 hostsInfo = [] for host in hostList: try: hostConn = LibvirtManage(host.server_ip, host.username, host.passwd, host.vm_type) hostSrv = hostConn.genre(model='server') hostConn.close() hostInfo = hostSrv.getVmServerInfo() hostsInfo += {'status': hostInfo['status']}, hostsInfo[count]['hostname'] = host.hostname hostsInfo[count]['server_ip'] = host.server_ip hostsInfo[count]['id'] = host.id hostsInfo[count]['cpu_total'] = hostInfo['cpu_total'] hostsInfo[count]['mem'] = hostInfo['mem'] hostsInfo[count]['instance'] = sum( [len(v) for v in hostInfo['vmStatus'].values()]) count += 1 except: hostsInfo += {'status': 1}, hostsInfo[count]['hostname'] = host.hostname hostsInfo[count]['server_ip'] = host.server_ip hostsInfo[count]['id'] = host.id hostsInfo[count]['cpu_total'] = host.cpu_total hostsInfo[count]['mem'] = host.mem hostsInfo[count]['instance'] = host.instance count += 1 continue return render_to_response('vmServer/list_server.html', { "user": request.user, "localtion": [{ "name": "Home", "url": '/' }, { "name": "Host List", "url": "/listServer" }], "hostsInfo": hostsInfo, "model": "server" }, context_instance=RequestContext(request))
def updateVMinstance(host=None): if host is None: serverList = VmServer.objects.all() for server in serverList: if server.status == 0: VMS = LibvirtManage(server.server_ip,server.username, server.passwd, server.vm_type,pool=False) SERVER = VMS.genre(model='server') if SERVER: dataList = SERVER.getVmInstanceBaseInfo(server_ip=server.server_ip,server_id=server.id) for ds in dataList: result = VmServerInstance.objects.filter(server=server,name=ds.get('name')) if result:VmServerInstance.objects.filter(server=server,name=ds.get('name')).update(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),status=ds.get('status'), name=ds.get('name'),token=ds.get('token'), vnc=ds.get('vnc'), ) else:VmServerInstance.objects.create(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),vnc=ds.get('vnc'), status=ds.get('status'),name=ds.get('name'), token=ds.get('token')) VMS.close() else: server = VmServer.objects.get(server_ip=host) if server and server.status == 0: VMS = LibvirtManage(server.server_ip,server.username, server.passwd, server.vm_type,pool=False) SERVER = VMS.genre(model='server') if SERVER: dataList = SERVER.getVmInstanceBaseInfo(server_ip=server.server_ip,server_id=server.id) for ds in dataList: result = VmServerInstance.objects.filter(server=server,name=ds.get('name')) if result:VmServerInstance.objects.filter(server=server,name=ds.get('name')).update(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),vnc=ds.get('vnc'), status=ds.get('status'),name=ds.get('name'), token=ds.get('token')) else:VmServerInstance.objects.create(server=server,cpu=ds.get('cpu'), mem=ds.get('mem'),status=ds.get('status'), name=ds.get('name'),token=ds.get('token'), vnc=ds.get('vnc')) VMS.close()
def viewVmServer(request): if request.GET.get('op') == "view": sid = request.GET.get('id') vServer = VMServer.selectOneHost(sid) VMS = LibvirtManage(vServer.uri) SERVER = VMS.genre(model='server') if SERVER: vmServer = SERVER.getVmServerInfo() else: return render_to_response('404.html', context_instance=RequestContext(request)) if vmServer: vmServer['id'] = vServer.id vmServer['server_ip'] = vServer.server_ip vmServer['name'] = vServer.hostname vmStorage = SERVER.getVmStorageInfo() vmInstance = SERVER.getVmInstanceInfo(server_ip=vServer.server_ip) vmIns = vmInstance.get('active').get('number') + vmInstance.get( 'inactice').get('number') vmInsList = [] for vm in vmIns: vm['netk'] = ','.join(vm.get('netk')) vm['disk'] = vm.get('disks') vm.pop('disks') vmInsList.append(vm) VMS.close() return render_to_response('vmServer/index_server.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机管理器", "url": '#' }, { "name": "主机列表", "url": "/listServer" }, { "name": vmServer.get('name'), "url": "/viewServer?op=view&id=" + str(vServer.id) }], "vmServer": vmServer, "model": "instance", "vmStorage": vmStorage, "vmInstance": vmInsList }, context_instance=RequestContext(request))
def viewInstance(request,id,vm): if request.method == "GET": vmServer = VmServer.objects.get(id=id) serverList = VmServer.objects.all().order_by("-id") try: VMS = LibvirtManage(vmServer.server_ip,vmServer.username, vmServer.passwd, vmServer.vm_type) INSTANCE = VMS.genre(model='instance') SERVER = VMS.genre(model='server') NETWORK = VMS.genre(model='network') if INSTANCE: instance = INSTANCE.queryInstance(name=str(vm)) '''获取存储池''' poolInfo = SERVER.getVmStorageInfo() '''获取网络设备''' netkInfo = NETWORK.listNetwork() '''获取cdrom设备''' imgList = INSTANCE.getMediaDevice(instance) '''获取iso存储池的iso列表''' isoList = SERVER.getVmIsoList() '''获取实例的xml文件''' insXml = INSTANCE.getInsXMLDesc(instance, flag=0) '''获取实例信息''' insInfo = INSTANCE.getVmInstanceInfo(instance,server_ip=vmServer.server_ip,vMname=vm) insInfo['cpu_per'] = INSTANCE.getCpuUsage(instance) snapList = INSTANCE.snapShotList(instance) VMS.close() else:return render_to_response('404.html',context_instance=RequestContext(request)) except Exception,e: snapList = None insInfo = None return render_to_response('vmInstance/view_instance.html', {"user":request.user,"localtion":[{"name":"首页","url":'/'},{"name":"宿主机","url":'/viewServer/'+id}, {"name":"虚拟机实例","url":"#"}], "inStance":insInfo,"vmServer":vmServer,"snapList":snapList,"poolInfo":poolInfo, "netkInfo":netkInfo,"imgList":imgList,"isoList":isoList,"serverList":serverList, "insXml":insXml}, context_instance=RequestContext(request))
def addVmServer(request): if request.method == "GET": return render_to_response('vmServer/add_server.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机管理器", "url": '#' }, { "name": "添加主机", "url": "/addServer" }] }, context_instance=RequestContext(request)) elif request.method == "POST": VMS = LibvirtManage(request.POST.get('vm_uri')) SERVER = VMS.genre(model='server') if SERVER: VMS.close() server = VMServer.insertVmServer( server_ip=request.POST.get('vm_host'), uri=request.POST.get('vm_uri'), vm_type=request.POST.get('vm_type'), hostname=request.POST.get('vm_hostname'), status=0, ) if server: return JsonResponse({ "code": 200, "msg": "服务器添加成功", "data": None }) else: return JsonResponse({ "code": 500, "msg": "服务器添加失败,写入数据库失败", "data": None }) else: return JsonResponse({ "code": 500, "msg": "服务器添加失败,注意URI连通性。", "data": None })
def instanceCpuStatus(request,id,vm): """ Return instance cpu usage """ vmServer = VmServer.objects.get(id=id) try: VMS = LibvirtManage(vmServer.server_ip,vmServer.username, vmServer.passwd, vmServer.vm_type) INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(vm)) data = dict() data['ctime'] = time.strftime('%Y-%m-%d %H:%M:%S' ,time.localtime()) data['per'] = INSTANCE.getCpuUsage(instance)#random.randint(50,100) return JsonResponse({"code":200,"data":data,"msg":None}) # except Exception,e: return JsonResponse({"code":200,"data":{'ctime':time.strftime('%Y-%m-%d %H:%M:%S' ,time.localtime()),"per":0},"msg":None})
def listStorage(request,id): if request.method == "GET": try: vServer = VmServer.objects.get(id=id) except Exception,e: return render_to_response('404.html',context_instance=RequestContext(request)) try: VMS = LibvirtManage(vServer.server_ip,vServer.username, vServer.passwd, vServer.vm_type) SERVER = VMS.genre(model='server') if SERVER: storageList = SERVER.getVmStorageInfo() VMS.close() else:return render_to_response('404.html',context_instance=RequestContext(request)) except Exception,e: return render_to_response('404.html',context_instance=RequestContext(request))
def handleStorage(request, id): if request.method == "POST": try: vServer = VmServer.objects.get(id=id) except Exception, e: return JsonResponse({ "code": 500, "msg": "Host resource not found", "data": e }) op = request.POST.get('op') pool_name = request.POST.get('pool_name') if op in [ 'delete', 'disable', 'refresh' ] and request.user.has_perm('VManagePlatform.change_vmserverinstance'): VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) STORAGE = VMS.genre(model='storage') pool = STORAGE.getStoragePool(pool_name=pool_name) if pool: if op == 'delete': result = STORAGE.deleteStoragePool(pool=pool) elif op == 'refresh': result = STORAGE.refreshStoragePool(pool=pool) VMS.close() if isinstance(result, int): return JsonResponse({ "code": 200, "msg": "Successful operation。", "data": None }) else: return JsonResponse({"code": 500, "msg": result}) else: return JsonResponse({ "code": 500, "msg": "Storage pool does not exist.", "data": e }) else: return JsonResponse({ "code": 500, "data": None, "msg": "No action is supported or you do not have permission to operate this item" })
def revertSnapShot(data,user): try: vMserver = VMServer.selectOneHost(id=data.get('server_id')) VMS = LibvirtManage(uri=vMserver.uri) INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(data.get('vm_name'))) status = INSTANCE.revertSnapShot(instance, data.get('snap_name')) VMS.close() desc = u'快照恢复{snap_name}'.format(snap_name=data.get('snap_name')) if status==0:status = status else:status = 1 result = VmLogs.objects.create(desc=desc,user=user,status=status,action='revert_snap',object=data.get('vm_name')) if result:return True else:return False except Exception,e: return e
def handleStorage(request): if request.method == "POST": op = request.POST.get('op') server_id = request.POST.get('server_id') pool_name = request.POST.get('pool_name') if op in [ 'delete', 'disable' ] and request.user.has_perm('VManagePlatform.change_vmserverinstance'): try: vMserver = VMServer.selectOneHost(id=server_id) VMS = LibvirtManage(uri=vMserver.uri) except Exception, e: return JsonResponse({ "code": 500, "msg": "服务器连接失败。。", "data": e }) if op == 'delete': STORAGE = VMS.genre(model='storage') pool = STORAGE.getStoragePool(pool_name=pool_name) if pool: result = STORAGE.deleteStoragePool(pool=pool) VMS.close() if result: return JsonResponse({ "code": 200, "msg": "存储池删除成功。", "data": None }) else: return JsonResponse({ "code": 500, "msg": "存储池删除失败。", "data": None }) else: return JsonResponse({ "code": 500, "msg": "存储池不存在。", "data": e }) else: return JsonResponse({ "code": 500, "data": None, "msg": "不支持操作或者您没有权限操作此项" })
def updateVMserver(): serverList = VMServer.listVmServer() for server in serverList: VMS = LibvirtManage(server.uri) SERVER = VMS.genre(model='server') server_id = server.id if SERVER: if server.status == 0: data = SERVER.getVmServerInfo() VMServer.updateVmServer(server_id=server_id,instance=data.get('ins'), mem=data.get('mem'),cpu_total=data.get('cpu_total'), mem_per=data.get('mem_per')) elif server.status == 1: result = VMServer.updateVmServerStatus(server_id=server_id, status=0) if isinstance(result, str):return result VMS.close() else: result = VMServer.updateVmServerStatus(server_id=server_id, status=1) if isinstance(result, str):return result
def listInstance(request, id): if request.method == "GET": try: vServer = VmServer.objects.get(id=id) except: return render_to_response('404.html', context_instance=RequestContext(request)) try: VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) SERVER = VMS.genre(model='server') VMS.close() userList = User.objects.all() if SERVER: inStanceList = SERVER.getVmInstanceBaseInfo( server_ip=vServer.server_ip, server_id=vServer.id) VMS.close() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except: inStanceList = None return render_to_response('vmInstance/list_instance.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "虚拟机实例列表", "url": "/listInstance/%d/" % vServer.id }], "inStanceList": inStanceList, "vmServer": vServer, "userList": userList }, context_instance=RequestContext(request))
def viewStorage(request, id, name): if request.method == "GET": try: vServer = VmServer.objects.get(id=id) except: return render_to_response('404.html', context_instance=RequestContext(request)) try: VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) STORAGE = VMS.genre(model='storage') if STORAGE: storage = STORAGE.getStorageInfo(name) VMS.close() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except Exception, e: return render_to_response('404.html', context_instance=RequestContext(request)) return render_to_response('vmStorage/view_storage.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "存储池管理", "url": "/listStorage/%d/" % vServer.id }, { "name": "存储池详情", "url": "/viewStorage/%d/%s/" % (vServer.id, name) }], "vmServer": vServer, "storage": storage }, context_instance=RequestContext(request))
def viewStorage(request): if request.method == "GET": vMserverId = request.GET.get('id') pool_name = request.GET.get('pool') vmServer = VMServer.selectOneHost(id=vMserverId) try: VMS = LibvirtManage(uri=vmServer.uri) STORAGE = VMS.genre(model='storage') if STORAGE: storage = STORAGE.getStorageInfo(pool_name) VMS.close() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except Exception, e: return render_to_response('404.html', context_instance=RequestContext(request)) return render_to_response('vmStorage/view_storage.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "存储池管理", "url": "/listStorage/?id=%d" % vmServer.id }, { "name": "存储池详情", "url": "/viewStorage/?id=%d&pool={{ ds.pool_name }}" % vmServer.id }], "vmServer": vmServer, "storage": storage }, context_instance=RequestContext(request))
def handleStorage(request, id): if request.method == "POST": try: vServer = VmServer.objects.get(id=id) except Exception, e: return JsonResponse({"code": 500, "msg": "找不到主机资源", "data": e}) op = request.POST.get('op') pool_name = request.POST.get('pool_name') if op in [ 'delete', 'disable', 'refresh' ] and request.user.has_perm('VManagePlatform.change_vmserverinstance'): VMS = LibvirtManage(vServer.server_ip, vServer.username, vServer.passwd, vServer.vm_type) STORAGE = VMS.genre(model='storage') pool = STORAGE.getStoragePool(pool_name=pool_name) if pool: if op == 'delete': result = STORAGE.deleteStoragePool(pool=pool) elif op == 'refresh': result = STORAGE.refreshStoragePool(pool=pool) VMS.close() if isinstance(result, int): return JsonResponse({ "code": 200, "msg": "操作成功。", "data": None }) else: return JsonResponse({"code": 500, "msg": result}) else: return JsonResponse({ "code": 500, "msg": "存储池不存在。", "data": None }) else: return JsonResponse({ "code": 500, "data": None, "msg": "不支持操作或者您没有权限操作此项" })
def vmStorage_detail(request, serverId, poolName, format=None): """ Retrieve, update or delete a server assets instance. """ try: vmServer = VmServer.objects.get(id=serverId) except VmServer.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) try: VMS = LibvirtManage(vmServer.server_ip, vmServer.username, vmServer.passwd, vmServer.vm_type) STORAGE = VMS.genre(model='storage') if STORAGE: storage = STORAGE.getStorageInfo(poolName) VMS.close() return Response(storage, status=status.HTTP_200_OK) else: return Response(status=status.HTTP_404_NOT_FOUND) except Exception, e: return Response(status=status.HTTP_404_NOT_FOUND)
def listInstance(request): if request.method == "GET": vMserverId = request.GET.get('id') vmServer = VMServer.selectOneHost(id=vMserverId) try: VMS = LibvirtManage(vmServer.uri) SERVER = VMS.genre(model='server') userList = User.objects.all() if SERVER: inStanceList = SERVER.getVmInstanceBaseInfo( server_ip=vmServer.server_ip, server_id=vmServer.id) VMS.close() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except: inStanceList = None return render_to_response('vmInstance/list_instance.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "虚拟机实例列表", "url": "/listInstance?id=%s" % vMserverId }], "inStanceList": inStanceList, "vmServer": vmServer, "userList": userList }, context_instance=RequestContext(request))