コード例 #1
0
ファイル: wizard.py プロジェクト: Mordred/webPyVirt
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
コード例 #2
0
ファイル: node.py プロジェクト: Mordred/webPyVirt
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)
    )
コード例 #3
0
ファイル: node.py プロジェクト: Mordred/webPyVirt
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))
コード例 #4
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canChangeAcls(request, *args, **kwargs):
    if not getNodes(request, "change_acl").count():
        return False        # No Nodes
    else:
        return True
コード例 #5
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canAutoimportDomains(request, *args, **kwargs):
    if not getNodes(request, "owner").count():
        return False        # No Nodes
    else:
        return True
コード例 #6
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canAddDomains(request, *args, **kwargs):
    return bool(getNodes(request, "add_domain").count() != 0)
コード例 #7
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canRemoveNodes(request, *args, **kwargs):
    if not getNodes(request, "delete_node").count():
        return False        # No Nodes
    else:
        return True
コード例 #8
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canEditNodes(request, *args, **kwargs):
    if not getNodes(request, "change_node").count():
        return False        # No Nodes
    else:
        return True
コード例 #9
0
ファイル: permissions.py プロジェクト: Mordred/webPyVirt
def canListNodes(request, *args, **kwargs):
    if not getNodes(request, "view_node").count():
        return False        # No Nodes
    else:
        return True
コード例 #10
0
ファイル: node.py プロジェクト: Mordred/webPyVirt
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)
    )