def listResources(remoteHashValue, projectUUID="None", sliceUUID="None"):
        logging.debug("Enter listResources")
        infoRspec = XmlHelper.getSimpleInformation()
        servers = VTDriver.getAllServers()
        baseVM = copy.deepcopy(infoRspec.response.information.resources.server[0].virtual_machine[0])
        if not servers:
            logging.debug("No VTServers available")
            infoRspec.response.information.resources.server.pop()
            resourcesString = XmlHelper.craftXmlClass(infoRspec)
            localHashValue = str(hash(resourcesString))
        else:
            for sIndex, server in enumerate(servers):
                if sIndex == 0:
                    baseServer = copy.deepcopy(infoRspec.response.information.resources.server[0])
                if sIndex != 0:
                    newServer = copy.deepcopy(baseServer)
                    infoRspec.response.information.resources.server.append(newServer)

                InformationDispatcher.__ServerModelToClass(
                    server, infoRspec.response.information.resources.server[sIndex]
                )
                if projectUUID is not "None":
                    vms = server.getVMs(projectId=projectUUID)
                else:
                    vms = server.getVMs()
                if not vms:
                    logging.debug("No VMs available")
                    if infoRspec.response.information.resources.server[sIndex].virtual_machine:
                        infoRspec.response.information.resources.server[sIndex].virtual_machine.pop()
                elif sliceUUID is not "None":
                    vms = vms.filter(sliceId=sliceUUID)
                    if not vms:
                        logging.error("No VMs available")
                        infoRspec.response.information.resources.server[sIndex].virtual_machine.pop()
                for vIndex, vm in enumerate(vms):
                    if vIndex != 0:
                        newVM = copy.deepcopy(baseVM)
                        infoRspec.response.information.resources.server[sIndex].virtual_machine.append(newVM)
                    InformationDispatcher.__VMmodelToClass(
                        vm, infoRspec.response.information.resources.server[sIndex].virtual_machine[vIndex]
                    )

            resourcesString = XmlHelper.craftXmlClass(infoRspec)
            localHashValue = str(hash(resourcesString))
        try:
            rHashObject = resourcesHash.objects.get(projectUUID=projectUUID, sliceUUID=sliceUUID)
            rHashObject.hashValue = localHashValue
            rHashObject.save()
        except:
            rHashObject = resourcesHash(hashValue=localHashValue, projectUUID=projectUUID, sliceUUID=sliceUUID)
            rHashObject.save()

        if remoteHashValue == rHashObject.hashValue:
            return localHashValue, ""
        else:
            return localHashValue, resourcesString
Beispiel #2
0
def admin_servers(request):
    
	if (not request.user.is_superuser):
        
		return simple.direct_to_template(request,
				template = 'not_admin.html',
				extra_context = {'user':request.user},
			) 
	
	servers = VTDriver.getAllServers()

	return simple.direct_to_template(
		request, template="servers/admin_servers.html",
		extra_context={"servers_ids": servers})
Beispiel #3
0
def dashboard(request):
	'''
	The dashboard view function
	'''
    
	if (not request.user.is_superuser):
		return HttpResponseRedirect('/accounts/login')        
   
	else: #Admin
        
		servers = VTDriver.getAllServers()
            
		return simple.direct_to_template(request, 
							template = 'dashboard_admin.html',
							extra_context = {
							'user': request.user,
							'servers' : servers,
							},
						)
 def forceListActiveVMs(serverID="None", vmID="None"):
     if serverID != "None":
         server = VTDriver.getServerById(serverID)
         vtam_vms = server.getVMs()
     else:
         if vmID != "None":
             servers = VTDriver.getAllServers()
             vtam_vms = list()
             for server in servers:
                 vtam_vms = server.getVMs(id=int(vmID))
                 if vtam_vms:
                     vmID = vtam_vms[0].getUUID()
                     break
             if not vtam_vms:
                 raise Exception("VM not found")
     xmlrpc_server = xmlrpclib.Server(server.getAgentURL())
     # Handle safely the connection against the agent
     try:
         server_active_vms = xmlrpc_server.force_list_active_vms(server.getAgentPassword(), vmID)
         updated_vms = list()
         for vm in vtam_vms:
             if vm.getUUID() in server_active_vms.keys():
                 vm.setState("running")
                 vm.save()
             else:
                 # XXX: avoiding "on queue" and "unknown" states to avoid bad management
                 # if vm.getState() in ['deleting...', 'failed', 'on queue', 'unknown']:
                 if vm.getState() in ["deleting...", "failed"]:
                     child = vm.getChildObject()
                     server = vm.Server.get()
                     # Action.objects.all().filter(objectUUID = vm.uuid).delete()
                     server.deleteVM(vm)
                     # Keep actions table up-to-date after each deletion
                     vm_uuids = [vm.uuid for vm in VirtualMachine.objects.all()]
                     Action.objects.all().exclude(objectUUID__in=vm_uuids).delete()
                 elif vm.getState() in ["running", "starting...", "stopping..."]:
                     vm.setState("stopped")
                     vm.save()
                 else:
                     continue
     except:
         server_active_vms = dict()
     return server_active_vms