def modfInstance(request): if request.method == "POST": if CommTools.argsCkeck(args=['op', 'server_id', 'vm_name'], data=request.POST) and request.user.has_perm( 'VManagePlatform.change_vmserverinstance'): vMserver = VMServer.selectOneHost(id=request.POST.get('server_id')) LIBMG = LibvirtManage(uri=vMserver.uri) SERVER = LIBMG.genre(model='server') STROAGE = LIBMG.genre(model='storage') INSTANCE = LIBMG.genre(model='instance') NETWORK = LIBMG.genre(model='network') if SERVER: instance = INSTANCE.queryInstance( name=str(request.POST.get('vm_name'))) if instance is False: LIBMG.close() return JsonResponse({ "code": 404, "data": None, "msg": "虚拟机不存在,或者已经被删除。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "虚拟主机链接失败。" }) #调整磁盘 if request.POST.get('device') == 'disk': if request.POST.get('op') == 'attach': if instance.state()[0] == 5: return JsonResponse({ "code": 500, "data": None, "msg": "请先启动虚拟机。" }) storage = STROAGE.getStoragePool( pool_name=request.POST.get('pool_name')) if storage: volume = STROAGE.createVolumes( pool=storage, volume_name=request.POST.get('vol_name'), drive=request.POST.get('vol_drive'), volume_capacity=request.POST.get('vol_size')) if volume: volPath = volume.path() volume_name = volume.name() else: LIBMG.close() return JsonResponse({ "code": 500, "data": None, "msg": "卷已经存在。" }) status = INSTANCE.addInstanceDisk(instance, volPath) LIBMG.close() if status: recordLogs.delay( user=request.user, action='attach_disk', status=0, vm_name=request.POST.get('vm_name')) return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: STROAGE.deleteVolume(storage, volume_name) recordLogs.delay( user=request.user, action='attach_disk', status=1, vm_name=request.POST.get('vm_name')) return JsonResponse({ "code": 500, "data": None, "msg": "操作失败。" }) else: LIBMG.close() return JsonResponse({ "code": 404, "data": None, "msg": "存储池不存在,或者已经被删除。" }) elif request.POST.get('op') == 'detach': status = INSTANCE.delInstanceDisk( instance, volPath=request.POST.get('disk')) LIBMG.close() recordLogs.delay(user=request.user, action='detach_disk', status=status, vm_name=request.POST.get('vm_name')) if status == 0: return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: LIBMG.close() return JsonResponse({ "code": 500, "data": status, "msg": "操作失败。" }) #调整网卡 elif request.POST.get('device') == 'netk': if request.POST.get('op') == 'attach': result = INSTANCE.addInstanceInterface( instance, brName=request.POST.get('netk_name')) recordLogs.delay(user=request.user, action='attach_netk', status=result, vm_name=request.POST.get('vm_name')) if result == 0: return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": status, "msg": "添加失败。" }) elif request.POST.get('op') == 'detach': result = INSTANCE.delInstanceInterface( instance, interName=request.POST.get('netk_name')) recordLogs.delay(user=request.user, action='detach_netk', status=result, vm_name=request.POST.get('vm_name')) if result == 0: return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": status, "msg": "添加失败。" }) #调整内存大小 elif request.POST.get('device') == 'mem': if request.POST.get('op') == 'attach': result = INSTANCE.setMem(instance, mem=int(request.POST.get('mem'))) recordLogs.delay(user=request.user, action='attach_mem', status=result, vm_name=request.POST.get('vm_name')) if result == 0: return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "不能设置虚拟机内存超过宿主机机器的物理内存" }) #调整cpu个数 elif request.POST.get('device') == 'cpu': if request.POST.get('op') == 'attach': result = INSTANCE.setVcpu(instance, cpu=int(request.POST.get('cpu'))) LIBMG.close() recordLogs.delay(user=request.user, action='attach_cpu', status=result, vm_name=request.POST.get('vm_name')) if result == 0: return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "不能设置虚拟机CPU超过宿主机机器的物理CPU个数" }) #调整带宽 elif request.POST.get('device') == 'bandwidth': SSH = BRManage(hostname=vMserver.server_ip, port=22) OVS = SSH.genre(model='ovs') BRCTL = SSH.genre(model='brctl') mode = INSTANCE.getInterFace(instance, request.POST.get('netk_name')) if request.POST.get('op') == 'attach': if mode.get('type') == 'openvswitch': if int(request.POST.get('bandwidth')) == 0: result = OVS.ovsCleanBandwidth( port=request.POST.get('netk_name')) else: result = OVS.ovsConfBandwidth( port=request.POST.get('netk_name'), bandwidth=request.POST.get('bandwidth')) else: if int(request.POST.get('bandwidth')) == 0: result = INSTANCE.cleanInterfaceBandwidth( instance, request.POST.get('netk_name')) result = INSTANCE.setInterfaceBandwidth( instance, port=request.POST.get('netk_name'), bandwidth=request.POST.get('bandwidth')) SSH.close() LIBMG.close() if result.get('status') == 'success': return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "未设置带宽,不需要清除" }) LIBMG.close() else: return JsonResponse({ "code": 500, "data": None, "msg": "暂时不支持的操作或者您没有权限操作操作此项。" })
elif op == 'clone': cloneInstace.delay(data=request.POST, user=request.user) VMS.close() return JsonResponse({ "code": 200, "data": None, "msg": "克隆任务提交成功." }) elif op == 'xml': try: result = INSTANCE.defineXML(xml=request.POST.get('xml')) except Exception, e: result = e VMS.close() recordLogs.delay(user=request.user, action=op, status=result, vm_name=insName) if isinstance(result, int): return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: return JsonResponse({ "code": 500, "data": result, "msg": "操作失败。" }) else: return JsonResponse({
def addInstance(request): if request.method == "GET": try: vMserverId = request.GET.get('id') vmServer = VMServer.selectOneHost(id=vMserverId) userList = User.objects.all() tempList = TempInstance.listVmTemp() VMS = LibvirtManage(vmServer.uri) SERVER = VMS.genre(model='server') NETWORK = VMS.genre(model='network') if SERVER: vStorage = SERVER.getVmStorageInfo() else: return render_to_response( '404.html', context_instance=RequestContext(request)) except: vStorage = None vMImages = SERVER.getVmIsoList() netkList = NETWORK.listNetwork() VMS.close() return render_to_response('vmInstance/add_instance.html', { "user": request.user, "localtion": [{ "name": "首页", "url": '/' }, { "name": "虚拟机实例", "url": '#' }, { "name": "添加虚拟机", "url": "/addInstance" }], "vmServer": vmServer, "vStorage": vStorage, "vMImages": vMImages, "netkList": netkList, "tempList": tempList, "userList": userList }, context_instance=RequestContext(request)) elif request.method == "POST": op = request.POST.get('op') if op in [ 'custom', 'xml', 'template' ] and request.user.has_perm('VManagePlatform.add_vmserverinstance'): try: vMserver = VMServer.selectOneHost( id=request.POST.get('server_id')) VMS = LibvirtManage(uri=vMserver.uri) INSTANCE = VMS.genre(model='instance') SERVER = VMS.genre(model='server') STORAGE = VMS.genre(model='storage') NETWORK = VMS.genre(model='network') except Exception, e: return JsonResponse({ "code": 500, "msg": "虚拟服务器连接失败,请注意连通性。", "data": e }) if SERVER: if op == 'custom': netks = [ str(i) for i in request.POST.get('netk').split(',') ] if INSTANCE: instance = INSTANCE.queryInstance( name=str(request.POST.get('vm_name'))) if instance: return JsonResponse({ "code": 500, "msg": "虚拟机已经存在", "data": None }) else: networkXml = '' radStr = CommTools.radString(4) for nt in netks: netkType = NETWORK.getNetworkType(nt) netXml = Const.CreateNetcard(nkt_br=nt, ntk_name=nt + '-' + radStr, mode=netkType) networkXml = netXml + networkXml pool = STORAGE.getStoragePool( pool_name=request.POST.get('storage')) volume_name = request.POST.get('vm_name') + '.img' if pool: volume = STORAGE.createVolumes( pool, volume_name=volume_name, volume_capacity=request.POST.get('disk')) if volume: disk_path = volume.path() volume_name = volume.name() disk_xml = Const.CreateDisk( volume_path=disk_path) else: return JsonResponse({ "code": 500, "msg": "添加虚拟机失败,存储池里面以存在以主机名命名的磁盘", "data": None }) else: return JsonResponse({ "code": 500, "msg": "添加虚拟机失败,存储池已经被删除掉", "data": None }) dom_xml = Const.CreateIntanceConfig( dom_name=request.POST.get('vm_name'), maxMem=int(SERVER.getServerInfo().get('mem')), mem=int(request.POST.get('mem')), cpu=request.POST.get('cpu'), disk=disk_xml, iso_path=request.POST.get('system'), network=networkXml) dom = SERVER.createInstance(dom_xml) recordLogs.delay( user=request.user, action=op, status=dom, vm_name=request.POST.get('vm_name')) if dom == 0: VMS.close() VmInstance.insertInstance( dict( server=vMserver, name=request.POST.get('vm_name'), cpu=request.POST.get('cpu'), mem=request.POST.get('mem'), owner=request.POST.get('owner'), status=1, )) return JsonResponse({ "code": 200, "data": None, "msg": "虚拟主机添加成功。" }) else: STORAGE.deleteVolume(pool, volume_name) VMS.close() return JsonResponse({ "code": 500, "data": None, "msg": "虚拟主机添加失败。" }) elif op == 'xml': domXml = request.POST.get('xml') dom = SERVER.defineXML(xml=domXml) VMS.close() recordLogs.delay(user=request.user, action=op, status=dom, vm_name=request.POST.get('vm_name')) if dom: return JsonResponse({ "code": 200, "data": None, "msg": "虚拟主机添加成功。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "虚拟主机添加失败。" }) elif op == 'template': try: temp = TempInstance.selectVmTemp( id=request.POST.get('temp')) if INSTANCE: instance = INSTANCE.queryInstance( name=str(request.POST.get('vm_name'))) if instance: return JsonResponse({ "code": 500, "msg": "虚拟机已经存在", "data": None }) else: pool = STORAGE.getStoragePool( pool_name=request.POST.get('storage')) volume_name = request.POST.get('vm_name') + '.img' if pool: volume = STORAGE.createVolumes( pool, volume_name=volume_name, volume_capacity=temp.disk) if volume: disk_path = volume.path() volume_name = volume.name() disk_xml = Const.CreateDisk( volume_path=disk_path) else: return JsonResponse({ "code": 500, "msg": "添加虚拟机失败,存储池里面以存在以主机名命名的磁盘", "data": None }) else: return JsonResponse({ "code": 500, "msg": "添加虚拟机失败,存储池已经被删除掉", "data": None }) dom_xml = Const.CreateIntanceConfig( dom_name=request.POST.get('vm_name'), maxMem=int(SERVER.getServerInfo().get('mem')), mem=temp.mem, cpu=temp.cpu, disk=disk_xml, iso_path=request.POST.get('system'), network=None) dom = SERVER.createInstance(dom_xml) recordLogs.delay( user=request.user, action=op, status=dom, vm_name=request.POST.get('vm_name')) if dom == 0: VMS.close() return JsonResponse({ "code": 200, "data": None, "msg": "虚拟主机添加成功。" }) else: STORAGE.deleteVolume(pool, volume_name) VMS.close() return JsonResponse({ "code": 500, "data": None, "msg": "虚拟主机添加失败。" }) except: return JsonResponse({ "code": 500, "data": None, "msg": "虚拟主机添加失败。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "虚拟服务器连接失败,请注意连通性。" }) else: return JsonResponse({ "code": 500, "data": None, "msg": "不支持的操作或者您没有权限添加虚拟机" })
volume_name = volume.name() else: LIBMG.close() return JsonResponse({ "code": 500, "data": None, "msg": "卷已经存在。" }) status = INSTANCE.addInstanceDisk(instance, volPath) LIBMG.close() if isinstance(status, int): recordLogs.delay( server_id=vServer.id, vm_name=request.POST.get('vm_name'), content="虚拟机{name},添加{size}GB的硬盘{volume_name}". format( name=request.POST.get('vm_name'), volume_name=request.POST.get('vol_name'), size=request.POST.get('vol_size')), user=str(request.user), status=0) return JsonResponse({ "code": 200, "data": None, "msg": "操作成功。" }) else: recordLogs.delay( server_id=vServer.id, vm_name=request.POST.get('vm_name'), content="虚拟机{name},添加{size}GB的硬盘{volume_name}". format(
def handleSnapshot(request): if request.method == "POST": op = request.POST.get('op') server_id = request.POST.get('server_id') insName = request.POST.get('vm_name') snapName = request.POST.get('snap_name') if op in [ 'view', 'resume', 'delete', 'add' ] 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) except Exception, e: return JsonResponse({ "code": 500, "msg": "服务器连接失败。。", "data": e }) try: INSTANCE = VMS.genre(model='instance') instance = INSTANCE.queryInstance(name=str(insName)) if op == 'view': snap = INSTANCE.snapShotView(instance, snapName) VMS.close() if snap: return JsonResponse({ "code": 200, "data": snap.replace('<', '<').replace('>', '>'), "msg": "查询成功." }) else: return JsonResponse({ "code": 500, "data": "查无结果", "msg": "查无结果" }) elif op == 'resume': revertSnapShot.delay(request.POST, str(request.user)) VMS.close() return JsonResponse({ "code": 200, "data": None, "msg": "快照恢复任务提交成功。" }) elif op == 'add': snapInstace.delay(request.POST, str(request.user)) VMS.close() return JsonResponse({ "code": 200, "data": None, "msg": "快照任务提交成功." }) elif op == 'delete': snap = INSTANCE.snapShotDelete(instance, snapName) VMS.close() recordLogs.delay(user=str(request.user), action=op + '_snap', status=snap, vm_name=insName) if snap == 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 })
elif op == 'add': snapInstace.delay(request.POST, str(request.user)) VMS.close() return JsonResponse({ "code": 200, "data": None, "msg": "快照任务提交成功." }) elif op == 'delete': snap = INSTANCE.snapShotDelete(instance, snapName) VMS.close() if isinstance(snap, int): recordLogs.delay( server_id=vServer.id, vm_name=request.POST.get('vm_name'), content="删除虚拟机{name}快照{snapName}".format( name=request.POST.get('vm_name'), snapName=snapName), user=str(request.user), status=0) return JsonResponse({ "code": 200, "data": None, "msg": "快照删除成功" }) else: recordLogs.delay( server_id=vServer.id, vm_name=request.POST.get('vm_name'), content="删除虚拟机{name}快照{snapName}".format( name=request.POST.get('vm_name'), snapName=snapName),
def addInstance(request,id): try: vmServer = VmServer.objects.get(id=id) except: return render_to_response('404.html',context_instance=RequestContext(request)) if request.method == "GET": userList = User.objects.all() tempList = VmInstance_Template.objects.all() VMS = LibvirtManage(vmServer.server_ip,vmServer.username, vmServer.passwd,vmServer.vm_type) SERVER = VMS.genre(model='server') NETWORK = VMS.genre(model='network') if SERVER: vStorage = SERVER.getVmStorageInfo() vMImages =SERVER.getVmIsoList() #.iso文件 netkList = NETWORK.listNetwork() VMS.close() return render_to_response('vmInstance/add_instance.html', {"user":request.user,"localtion":[{"name":"首页","url":'/'},{"name":"宿主机","url":'/viewServer/'+str(vmServer.id)}, {"name":"创建虚拟机","url":"/addInstance/"+str(vmServer.id)}], "vmServer":vmServer,"vStorage":vStorage,"vMImages":vMImages,"netkList":netkList, "tempList":tempList,"userList":userList}, context_instance=RequestContext(request)) elif request.method == "POST": op = request.POST.get('op') if op in ['custom','xml','template'] and request.user.has_perm('VManagePlatform.add_vmserverinstance'): VMS = LibvirtManage(vmServer.server_ip,vmServer.username, vmServer.passwd,vmServer.vm_type) INSTANCE = VMS.genre(model='instance') SERVER = VMS.genre(model='server') STORAGE = VMS.genre(model='storage') NETWORK = VMS.genre(model='network') #自定义配置创建虚拟机 if op == 'custom': netks = [ str(i) for i in request.POST.get('netk').split(',')] if INSTANCE: instance = INSTANCE.queryInstance(name=str(request.POST.get('vm_name'))) if instance: return JsonResponse({"code":500,"msg":"虚拟机已经存在","data":None}) else: networkXml = '' radStr = CommTools.radString(4) for nt in netks: netkType = NETWORK.getNetworkType(nt) netXml = Const.CreateNetcard(nkt_br=nt,ntk_name=nt+'-'+radStr,data=netkType) networkXml = netXml + networkXml pool = STORAGE.getStoragePool(pool_name=request.POST.get('storage')) volume_name = request.POST.get('vm_name')+'.img' if not pool: return JsonResponse({"code":500,"msg":"创建虚拟机失败,存储池已经被删除掉","data":None}) if request.POST.get('storagetype') == 'new': #创建新磁盘 volume = STORAGE.createVolumes(pool, volume_name=volume_name, volume_capacity=request.POST.get('disk')) if isinstance(volume, str): return JsonResponse({"code":500,"msg":volume,"data":None}) disk_path = volume.path() volume_name = volume.name() disk_xml = Const.CreateDisk(volume_path=disk_path) else: #使用现有磁盘 volume = STORAGE.getStorageVolume(pool, request.POST.get('vol')) if isinstance(volume, str): return JsonResponse({"code":500,"msg":volume,"data":None}) disk_path = volume.path() volume_name = volume.name() disk_xml = Const.CreateDisk(volume_path=disk_path) iso_path = request.POST.get('system') if not iso_path: iso_path = "" dom_xml = Const.CreateIntanceConfig(dom_name=request.POST.get('vm_name'),maxMem=int(SERVER.getServerInfo().get('mem')), mem=int(request.POST.get('mem')),cpu=request.POST.get('cpu'),disk=disk_xml, iso_path=iso_path,network=networkXml) dom = SERVER.createInstance(dom_xml) if dom==0: instance = INSTANCE.queryInstance(name=str(request.POST.get('vm_name'))) VMS.close() #生成VmServerInstance表记录 try: VmServerInstance.objects.create(server=vmServer,name=request.POST.get('vm_name'),mem=int(request.POST.get('mem')),status=1, cpu=request.POST.get('cpu'),token=INSTANCE.getInsUUID(instance)) except Exception,e: return JsonResponse({"code":500,"data":None,"msg":e}) #生成日志 recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=dom) return JsonResponse({"code":200,"data":None,"msg":"虚拟主机添加成功。"}) else: if request.POST.get('storagetype') == 'new': #创建虚拟机失败时,删除创建的磁盘文件 STORAGE.deleteVolume(pool, volume_name) VMS.close() recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=1,result=dom) return JsonResponse({"code":500,"data":None,"msg":dom}) elif op == 'xml': domXml = request.POST.get('xml') dom = SERVER.defineXML(xml=domXml) VMS.close() if isinstance(dom,int): recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="通过XML创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=dom) return JsonResponse({"code":200,"data":None,"msg":"虚拟主机添加成功。"}) else: recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="通过XML创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=1,result=dom) return JsonResponse({"code":500,"data":None,"msg":dom}) elif op=='template': try: temp = VmInstance_Template.objects.get(id=request.POST.get('temp')) if INSTANCE: instance = INSTANCE.queryInstance(name=str(request.POST.get('vm_name'))) if instance: return JsonResponse({"code":500,"msg":"虚拟机已经存在","data":None}) else: pool = STORAGE.getStoragePool(pool_name=request.POST.get('storage')) volume_name = request.POST.get('vm_name')+'.img' if pool: volume = STORAGE.createVolumes(pool, volume_name=volume_name, volume_capacity=temp.disk) if volume: disk_path = volume.path() volume_name = volume.name() disk_xml = Const.CreateDisk(volume_path=disk_path) else: return JsonResponse({"code":500,"msg":"创建虚拟机失败,存储池里面以存在以主机名命名的磁盘","data":None}) else: return JsonResponse({"code":500,"msg":"创建虚拟机失败,存储池已经被删除掉","data":None}) dom_xml = Const.CreateIntanceConfig(dom_name=request.POST.get('vm_name'),maxMem=int(SERVER.getServerInfo().get('mem')), mem=temp.mem,cpu=temp.cpu,disk=disk_xml, iso_path=request.POST.get('system'),network=None) dom = SERVER.createInstance(dom_xml) if dom==0: VMS.close() recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="通过模板创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=dom) return JsonResponse({"code":200,"data":None,"msg":"虚拟主机添加成功。"}) else: STORAGE.deleteVolume(pool, volume_name) VMS.close() recordLogs.delay(server_id=vmServer.id,vm_name=request.POST.get('vm_name'), content="通过模板创建虚拟机{name}".format(name=request.POST.get('vm_name')), user=str(request.user),status=1,result=dom) return JsonResponse({"code":500,"data":None,"msg":dom}) except: return JsonResponse({"code":500,"data":None,"msg":"虚拟主机添加失败。"})
snap = INSTANCE.snapShotView(instance, snapName) VMS.close() if snap:return JsonResponse({"code":200,"data":snap.replace('<','<').replace('>','>'),"msg":"search successful."}) else:return JsonResponse({"code":500,"data":"Check no result","msg":"Check no result"}) elif op == 'resume': revertSnapShot.delay(request.POST,str(request.user)) VMS.close() return JsonResponse({"code":200,"data":None,"msg":"The snapshot recovery task was submitted successfully."}) elif op == 'add': snapInstace.delay(request.POST,str(request.user)) VMS.close() return JsonResponse({"code":200,"data":None,"msg":"Snapshot task submitted successfully."}) elif op == 'delete': snap = INSTANCE.snapShotDelete(instance, snapName) VMS.close() if isinstance(snap, int): recordLogs.delay(server_id=vServer.id,vm_name=request.POST.get('vm_name'), content="Delete virtual machine{name}Snapshot{snapName}".format(name=request.POST.get('vm_name'), snapName=snapName), user=str(request.user),status=0) return JsonResponse({"code":200,"data":None,"msg":"Snapshot deleted successfully"}) else: recordLogs.delay(server_id=vServer.id,vm_name=request.POST.get('vm_name'), content="Delete virtual machine{name}Snapshot{snapName}".format(name=request.POST.get('vm_name'), snapName=snapName), user=str(request.user),status=0,result=snap) return JsonResponse({"code":500,"data":None,"msg":"Snapshot delete failed"}) except Exception,e: return JsonResponse({"code":500,"msg":"The virtual machine snapshot operation failed. .","data":e}) else: return JsonResponse({"code":500,"msg":"Unsupported operation.","data":e})