def migrate(request): if request.method != "POST" or "secret" not in request.POST or "action" not in request.POST: return HttpResponseRedirect("%s" % (reverse("403"))) #endif secret = request.POST['secret'] action = request.POST['action'] permis = request.session.get("domains.domain.migrate", {}) if secret not in permis: return HttpResponseRedirect("%s" % (reverse("403"))) #endif domainData = permis[secret][1] domain = domainData['domain'] if not isAllowedTo(request, domain, "migrate_domain"): return HttpResponseRedirect("%s" % (reverse("403"))) #endif data = { "status": 200, "statusMessage": _("OK") } if action == "nodeList": # Ziskaj zoznam uzlov, na ktore mas pravo "add_domain" nodes = getNodes(request, "add_domain") # Filtruj iba uzle, ktore maju rovnaky hypervizor nodes = nodes.filter(driver=domain.node.driver).exclude(name=domain.node.name) # Vsetky otestuje na status availNodes = [] for node in nodes: try: virNode = virtualization.virNode(node) result = virNode.getInfo() except: continue finally: availNodes.append(node) #endtry #endfor data['nodes'] = [ { "label": node.name, "value": node.id } for node in availNodes ] elif action == "migrate": # Premigruje sa domena a v DB sa zmeni odkaz na node nodeId = int(request.POST['node']) node = get_object_or_404(Node, id=nodeId) try: virDomain = virtualization.virDomain(domain) virDomain.migrate(node) except virtualization.ErrorException, e: data['error'] = unicode(e) else: domain.node = node data['migrated'] = True data['id'] = domain.id
def list(request): nodes = getNodes(request, "view_node") if not len(nodes): return HttpResponseRedirect("%s" % (reverse("403"))) #endif paginator = Paginator(nodes, 25) try: page = int(request.GET.get("page", "1")) except ValueError: page = 1 #endtry try: nodes = paginator.page(page) except (EmptyPage, InvalidPage): nodes = paginator.page(paginator.num_pages) #endtry return render_to_response( "nodes/node/list.html", { "nodes": nodes }, context_instance=RequestContext(request) )
def select_autocomplete(request, permission): permis = request.session.get("nodes.node.select", {}) if not permission in permis or (time.time() - permis[permission]) > 1800: return HttpResponse(simplejson.dumps([])) #endif search = request.GET['term'] nodeFilter = request.session.get('nodes.node.select.nodeFilter', None) nodes = getNodes(request, nodeFilter, search) data = [ node.name for node in nodes ] return HttpResponse(simplejson.dumps(data))
def canChangeAcls(request, *args, **kwargs): if not getNodes(request, "change_acl").count(): return False # No Nodes else: return True
def canAutoimportDomains(request, *args, **kwargs): if not getNodes(request, "owner").count(): return False # No Nodes else: return True
def canAddDomains(request, *args, **kwargs): return bool(getNodes(request, "add_domain").count() != 0)
def canRemoveNodes(request, *args, **kwargs): if not getNodes(request, "delete_node").count(): return False # No Nodes else: return True
def canEditNodes(request, *args, **kwargs): if not getNodes(request, "change_node").count(): return False # No Nodes else: return True
def canListNodes(request, *args, **kwargs): if not getNodes(request, "view_node").count(): return False # No Nodes else: return True
def select(request, next, nodeFilter, permission = None, *args, **kwargs): if permission: if not permission(request, *args, **kwargs): return HttpResponseRedirect("%s" % (reverse("403"))) #endif #endif permis = request.session.get("nodes.node.select", {}) permisHash = sha.sha(request.user.username.upper() + ":" + str(time.time())).hexdigest() permis[permisHash] = time.time() # Session cleanup hashes = permis.keys() for per in hashes: if (time.time() - permis[per]) > 1800: del permis[per] #endif #endfor request.session['nodes.node.select'] = permis request.session['nodes.node.select.nodeFilter'] = nodeFilter nodes = getNodes(request, nodeFilter) paginator = Paginator(nodes, 25) try: page = int(request.GET.get("page", "1")) except ValueError: page = 1 #endtry try: nodes = paginator.page(page) except (EmptyPage, InvalidPage): nodes = paginator.page(paginator.num_pages) #endtry if request.method == "POST": form = SelectNodeForm(request.POST) if form.is_valid(): node = get_object_or_404(Node, name=form.cleaned_data['name']) if node not in nodes.object_list: # User doesn't have permission to view this node form._errors['name'] = ErrorList([ _("A node with that name does not exist.") ]) del form.cleaned_data['name'] else: kwargs['nodeId'] = node.id return HttpResponseRedirect( reverse(next, args = args, kwargs = kwargs) ) #endif #endif else: form = SelectNodeForm() #endif return render_to_response( "nodes/node/select.html", { "nodes": nodes, "form": form, "permission": permisHash, "next": next, "next_args": args, "next_kwargs": kwargs }, context_instance=RequestContext(request) )