Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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))
Exemple #6
0
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}) 
Exemple #7
0
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))
Exemple #8
0
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))
Exemple #9
0
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
            })
Exemple #10
0
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))
Exemple #11
0
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))
Exemple #12
0
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()   
Exemple #13
0
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
            })
Exemple #14
0
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))        
Exemple #15
0
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"
            })
Exemple #16
0
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       
Exemple #17
0
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": "不支持操作或者您没有权限操作此项"
            })
Exemple #18
0
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))
Exemple #20
0
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))
Exemple #21
0
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))
Exemple #22
0
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": "不支持操作或者您没有权限操作此项"
            })
Exemple #23
0
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 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)
Exemple #25
0
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))
Exemple #26
0
def handleVolume(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','add'] and request.user.has_perm('VManagePlatform.change_vmserverinstance'):
            try:
                vServer = VmServer.objects.get(id=server_id)
            except:
                return JsonResponse({"code":500,"data":None,"msg":"The host does not exist"})                 
            VMS = LibvirtManage(vServer.server_ip,vServer.username, vServer.passwd, vServer.vm_type)
            STORAGE = VMS.genre(model='storage')
            if STORAGE:
                pool = STORAGE.getStoragePool(pool_name=pool_name)
                if pool:
                    volume = STORAGE.getStorageVolume(pool=pool, volume_name=request.POST.get('vol_name'))
                    if op == 'add':
                        if volume:return JsonResponse({"code":500,"data":None,"msg":"Volume already exist"})
                        else:
                            status = STORAGE.createVolumes(pool=pool, volume_name=request.POST.get('vol_name'),
                                                volume_capacity=int(request.POST.get('vol_size')),drive=request.POST.get('vol_drive'))
                            VMS.close()
                            if isinstance(status,str) :return  JsonResponse({"code":500,"data":None,"msg":status})
                            else:return  JsonResponse({"code":200,"data":None,"msg":"The volume created succesfully"})
                    elif op == 'delete':
                        if volume:
                            status = STORAGE.deleteVolume(pool=pool, volume_name=request.POST.get('vol_name'))
                            VMS.close()
                            if isinstance(status, str):return  JsonResponse({"code":500,"data":status,"msg":"Failed to delete volume"})
                            else:return  JsonResponse({"code":200,"data":None,"msg":"Volume deleted successfully"})
                        else:return  JsonResponse({"code":500,"data":None,"msg":"The deletion of the volume failed, the volume does not exist."})
                else:return  JsonResponse({"code":500,"data":None,"msg":Storage pool does not exist."})
            else:
                return  JsonResponse({"code":500,"data":None,"msg":"Host connection failed."})
        else:
            return  JsonResponse({"code":500,"data":None,"msg":"Operation does not support"})                                 
    else:
        return  JsonResponse({"code":500,"data":None,"msg":"Unsupported HTTP operation."})              
Exemple #27
0
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))                 
Exemple #28
0
def backupInstace(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.backupCreate(instance, data.get('backup_name'))
        VMS.close()
        if isinstance(status, str) is False:
            VmLogs.objects.create(
                server_id=data.get('server_id'),
                vm_name=data.get('vm_name'),
                content="Virtual Machine {name} Create a backup {backup}".
                format(name=data.get('vm_name'),
                       backup=data.get('backup_name')),
                user=user,
                status=0,
                isRead=0)
        else:
            VmLogs.objects.create(
                server_id=data.get('server_id'),
                vm_name=data.get('vm_name'),
                content="Virtual Machine {name} Create a backup {backup}".
                format(name=data.get('vm_name'),
                       backup=data.get('backup_name')),
                user=user,
                status=1,
                isRead=0,
                result=status)

    except Exception, e:
        return e
Exemple #29
0
def handleVolume(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', 'add', 'clone'
        ] and request.user.has_perm('VManagePlatform.change_vmserverinstance'):
            try:
                vServer = VmServer.objects.get(id=server_id)
            except:
                return JsonResponse({
                    "code": 500,
                    "data": None,
                    "msg": "主机不存在。"
                })

            VMS = LibvirtManage(vServer.server_ip, vServer.username,
                                vServer.passwd, vServer.vm_type)
            STORAGE = VMS.genre(model='storage')

            if STORAGE:
                pool = STORAGE.getStoragePool(pool_name=pool_name)
                if pool:
                    volume = STORAGE.getStorageVolume(
                        pool=pool, volume_name=request.POST.get('vol_name'))
                    if op == 'add':
                        if volume:
                            return JsonResponse({
                                "code": 500,
                                "data": None,
                                "msg": "卷已经存在"
                            })
                        else:
                            status = STORAGE.createVolumes(
                                pool=pool,
                                volume_name=request.POST.get('vol_name'),
                                volume_capacity=int(
                                    request.POST.get('vol_size')),
                                drive=request.POST.get('vol_drive'))
                            VMS.close()
                            if isinstance(status, str):
                                return JsonResponse({
                                    "code": 500,
                                    "data": None,
                                    "msg": status
                                })
                            else:
                                return JsonResponse({
                                    "code": 200,
                                    "data": None,
                                    "msg": "卷创建成功。"
                                })
                    elif op == 'delete':
                        if volume:
                            status = STORAGE.deleteVolume(
                                pool=pool,
                                volume_name=request.POST.get('vol_name'))
                            VMS.close()
                            if isinstance(status, str):
                                return JsonResponse({
                                    "code": 500,
                                    "data": status,
                                    "msg": "卷删除失败。"
                                })
                            else:
                                return JsonResponse({
                                    "code": 200,
                                    "data": None,
                                    "msg": "卷删除成功。"
                                })
                        else:
                            return JsonResponse({
                                "code": 500,
                                "data": None,
                                "msg": "卷删除失败,卷不存在。"
                            })
                    elif op == 'clone':
                        if not volume:
                            return JsonResponse({
                                "code": 500,
                                "data": None,
                                "msg": "卷不存在"
                            })

                        target_volume_name = "clone_" + request.POST.get(
                            'vol_name')
                        new_vol_name = request.POST.get('new_vol_name')
                        if new_vol_name:
                            target_volume_name = new_vol_name

                        new_volume = STORAGE.getStorageVolume(
                            pool=pool, volume_name=new_vol_name)
                        if new_volume:
                            return JsonResponse({
                                "code": 500,
                                "data": None,
                                "msg": "卷已经存在"
                            })

                        vol_format = vMUtil.get_xml_path(
                            volume.XMLDesc(0),
                            "/volume/target/format/@type")  #卷格式

                        vol_clone_xml = """
                                        <volume>
                                            <name>%s</name>
                                            <capacity>0</capacity>
                                            <allocation>0</allocation>
                                            <target>
                                                <format type='%s'/>
                                            </target>
                                        </volume>""" % (target_volume_name,
                                                        vol_format)
                        pool.createXMLFrom(vol_clone_xml, volume,
                                           False)  #从vol卷复制卷,阻塞
                        return JsonResponse({
                            "code": 200,
                            "data": None,
                            "msg": "卷克隆成功。"
                        })
                else:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "存储池不存在。"
                    })
            else:
                return JsonResponse({
                    "code": 500,
                    "data": None,
                    "msg": "主机连接失败。"
                })
        else:
            return JsonResponse({"code": 500, "data": None, "msg": "不支持操作。"})
    else:
        return JsonResponse({"code": 500, "data": None, "msg": "不支持的HTTP操作。"})
Exemple #30
0
         if pool_name:
             #判断远程服务器上是否存在相同的存储池
             pool = TargetStorage.getStoragePool(pool_name=pool_name)
             if pool:
                 volume_name = volume.get('disk_path')
                 pathf = os.path.dirname(volume.get('disk_path'))
                 volume_name = volume_name[len(pathf) + 1:]
                 #创建磁盘
                 traget_volume = TargetStorage.createVolumes(
                     pool,
                     volume_name=volume_name,
                     volume_capacity=volume.get('disk_size'),
                     flags=0)
 result = INSTANCE.migrate(instance, TargetVMS.conn, data.get('vm_tname'),
                           targetUri)
 TargetVMS.close()
 VMS.close()
 if result: result = 0
 else: result = 1
 desc = u'迁移虚拟机{vm_name}至{server_ip}宿主机'.format(vm_name=data.get('vm_name'),
                                                server_ip=targetUri)
 try:
     result = VmLogs.objects.create(server_id=data.get('server_id'),
                                    vm_name=data.get('vm_name'),
                                    content=desc,
                                    user=user,
                                    status=result,
                                    isRead=0)
     if result: return True
     else: return False
 except Exception, e: