示例#1
0
def get_clusternodes(request):
    if (
        request.user.is_superuser or
        request.user.has_perm('ganeti.view_instances')
    ):
        nodes = cache.get('allclusternodes')
        bad_clusters = cache.get('badclusters')
        bad_nodes = cache.get('badnodes')
        if nodes is None:
            nodes, bad_clusters, bad_nodes = prepare_clusternodes()
            cache.set('allclusternodes', nodes, 90)
        if bad_clusters:
            messages.add_message(
                request,
                msgs.WARNING,
                "Some nodes may be missing because the" +
                " following clusters are unreachable: " +
                ", ".join([c.description or c.hostname for c in bad_clusters])
            )
            cache.set('badclusters', bad_clusters, 90)
        if bad_nodes:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some nodes appear to be offline: " +
                ", ".join(bad_nodes)
            )
            cache.set('badnodes', bad_nodes, 90)
        if settings.SERVER_MONITORING_URL:
            servermon_url = settings.SERVER_MONITORING_URL
        status_dict = {}
        status_dict['offline'] = 0
        status_dict['regular'] = 0
        status_dict['drained'] = 0
        status_dict['master'] = 0
        status_dict['candidate'] = 0
        for n in nodes:
            if n['role'] == 'O':
                status_dict['offline'] += 1
            if n['role'] == 'D':
                status_dict['drained'] += 1
            if n['role'] == 'R':
                status_dict['regular'] += 1
            if n['role'] == 'C':
                status_dict['candidate'] += 1
            if n['role'] == 'M':
                status_dict['master'] += 1
        clusters = list(set([n['cluster'] for n in nodes]))
        return render(
            request,
            'clusters/cluster_nodes.html',
            {
                'nodes': nodes,
                'clusters': clusters,
                'statuses': status_dict,
                'servermon': servermon_url
            }
        )
    else:
        return HttpResponseRedirect(reverse('user-instances'))
示例#2
0
def clusternodes_json(request, cluster=None):
    if (
        request.user.is_superuser or
        request.user.has_perm('ganeti.view_instances')
    ):
        nodedetails = []
        jresp = {}
        nodes = []
        bad_clusters = []
        bad_nodes = []
        if cluster:
            cluster = get_object_or_404(Cluster, pk=cluster)
        cache.get('allclusternodes')
        if not nodes:
            nodes, bad_clusters, bad_nodes = prepare_clusternodes(cluster)
            cache.set('allclusternodes', nodes, 90)
        if bad_clusters:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some clusters appear to be offline: " +
                ", ".join([c.slug for c in bad_clusters])
            )

        if bad_nodes:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some nodes appear to be offline: " +
                ", ".join(bad_nodes)
            )
        for node in nodes:
            if (not cluster or
                    (cluster and node['cluster'] == cluster.hostname)):
                node_dict = {}
                node_dict['name'] = node['name']
                # node_dict['node_group'] = node['node_group']
                node_dict['mem_used'] = node['mem_used']
                node_dict['mfree'] = node['mfree']
                node_dict['mtotal'] = node['mtotal']
                node_dict['shared_storage'] = node['shared_storage']
                node_dict['disk_used'] = node['disk_used']
                node_dict['dfree'] = node['dfree']
                node_dict['dtotal'] = node['dtotal']
                node_dict['ctotal'] = node['ctotal']
                node_dict['pinst_cnt'] = node['pinst_cnt']
                node_dict['pinst_list'] = node['pinst_list']
                node_dict['role'] = node['role']
                if cluster:
                    node_dict['cluster'] = cluster.hostname
                else:
                    node_dict['cluster'] = node['cluster']
                nodedetails.append(node_dict)
        jresp['aaData'] = nodedetails
        res = jresp
        return HttpResponse(json.dumps(res), content_type='application/json')
    else:
        raise PermissionDenied
示例#3
0
def clusternodes_json(request, cluster=None):
    if (
        request.user.is_superuser or
        request.user.has_perm('ganeti.view_instances')
    ):
        nodedetails = []
        jresp = {}
        nodes = []
        bad_clusters = []
        bad_nodes = []
        if cluster:
            cluster = get_object_or_404(Cluster, pk=cluster)
        cache.get('allclusternodes')
        if not nodes:
            nodes, bad_clusters, bad_nodes = prepare_clusternodes(cluster)
            cache.set('allclusternodes', nodes, 90)
        if bad_clusters:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some clusters appear to be offline: " +
                ", ".join([c.slug for c in bad_clusters])
            )

        if bad_nodes:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some nodes appear to be offline: " +
                ", ".join(bad_nodes)
            )
        for node in nodes:
            if (not cluster or
                    (cluster and node['cluster'] == cluster.hostname)):
                node_dict = {}
                node_dict['name'] = node['name']
                # node_dict['node_group'] = node['node_group']
                node_dict['mem_used'] = node['mem_used']
                node_dict['mfree'] = node['mfree']
                node_dict['mtotal'] = node['mtotal']
                node_dict['shared_storage'] = node['shared_storage']
                node_dict['disk_used'] = node['disk_used']
                node_dict['dfree'] = node['dfree']
                node_dict['dtotal'] = node['dtotal']
                node_dict['ctotal'] = node['ctotal']
                node_dict['pinst_cnt'] = node['pinst_cnt']
                node_dict['pinst_list'] = node['pinst_list']
                node_dict['role'] = node['role']
                if cluster:
                    node_dict['cluster'] = cluster.hostname
                else:
                    node_dict['cluster'] = node['cluster']
                nodedetails.append(node_dict)
        jresp['aaData'] = nodedetails
        res = jresp
        return HttpResponse(json.dumps(res), content_type='application/json')
    else:
        raise PermissionDenied
示例#4
0
def get_clusternodes_pjax(request):
    if (request.user.is_superuser
            or request.user.has_perm('ganeti.view_instances')):
        nodes = cache.get('allclusternodes')
        bad_clusters = cache.get('badclusters')
        bad_nodes = cache.get('badnodes')
        if nodes is None:
            nodes, bad_clusters, bad_nodes = prepare_clusternodes()
            cache.set('allclusternodes', nodes, 180)
        if bad_clusters:
            for c in bad_clusters:
                messages.add_message(
                    request, msgs.WARNING,
                    "Some nodes may be missing because the" +
                    " following clusters are unreachable: " +
                    ", ".join([c.description or c.hostname]))
            cache.set('badclusters', bad_clusters, 180)
        if bad_nodes:
            messages.add_message(
                request, msgs.ERROR,
                "Some nodes appear to be offline: " + ", ".join(bad_nodes))
            cache.set('badnodes', bad_nodes, 180)
        if settings.SERVER_MONITORING_URL:
            servermon_url = settings.SERVER_MONITORING_URL
        status_dict = {}
        status_dict['offline'] = 0
        status_dict['regular'] = 0
        status_dict['drained'] = 0
        status_dict['master'] = 0
        status_dict['candidate'] = 0
        for n in nodes:
            if n['role'] == 'O':
                status_dict['offline'] += 1
            if n['role'] == 'D':
                status_dict['drained'] += 1
            if n['role'] == 'R':
                status_dict['regular'] += 1
            if n['role'] == 'C':
                status_dict['candidate'] += 1
            if n['role'] == 'M':
                status_dict['master'] += 1
        clusters = list(set([n['cluster'] for n in nodes]))
        return render(
            request, 'clusters/cluster_nodes_pjax.html', {
                'nodes': nodes,
                'clusters': clusters,
                'statuses': status_dict,
                'servermon': servermon_url
            })
    else:
        raise PermissionDenied
示例#5
0
def clusternodes_json(request, cluster=None):
    if (
        request.user.is_superuser or
        request.user.has_perm('ganeti.view_instances')
    ):
        nodedetails = []
        jresp = {}
        nodes = None
        nodes = cache.get('allclusternodes')
        bad_clusters = cache.get('badclusters')
        bad_nodes = cache.get('badnodes')
        if nodes is None:
            nodes, bad_clusters, bad_nodes = prepare_clusternodes()
            cache.set('allclusternodes', nodes, 90)
        if bad_clusters:
            messages.add_message(
                request,
                msgs.WARNING,
                "Some nodes may be missing because the" +
                " following clusters are unreachable: " +
                ", ".join([c.description or c.hostname for c in bad_clusters])
            )
            cache.set('badclusters', bad_clusters, 90)
        if bad_nodes:
            messages.add_message(
                request,
                msgs.ERROR,
                "Some nodes appear to be offline: " +
                ", ".join(bad_nodes)
            )
            cache.set('badnodes', bad_nodes, 90)
        if cluster:
            try:
                cluster = Cluster.objects.get(hostname=cluster)
            except Cluster.DoesNotExist:
                cluster = None
        for node in nodes:
            if not cluster or (cluster and node['cluster'] == cluster.slug):
                node_dict = {}
                node_dict['name'] = node['name']
                # node_dict['node_group'] = node['node_group']
                node_dict['mem_used'] = node['mem_used']
                node_dict['mfree'] = node['mfree']
                node_dict['mtotal'] = node['mtotal']
                node_dict['shared_storage'] = node['shared_storage']
                node_dict['disk_used'] = node['disk_used']
                node_dict['dfree'] = node['dfree']
                node_dict['dtotal'] = node['dtotal']
                node_dict['ctotal'] = node['ctotal']
                node_dict['pinst_cnt'] = node['pinst_cnt']
                node_dict['pinst_list'] = node['pinst_list']
                node_dict['role'] = node['role']
                if cluster:
                    node_dict['cluster'] = cluster.hostname
                else:
                    node_dict['cluster'] = node['cluster']
                nodedetails.append(node_dict)
        jresp['aaData'] = nodedetails
        res = jresp
        return HttpResponse(json.dumps(res), mimetype='application/json')
    else:
        raise PermissionDenied