示例#1
0
def clusterdetails_json(request):
    if request.user.is_superuser or request.user.has_perm('ganeti.view_instances'):
        if request.GET.get('cluster'):
            cluster_slug = request.GET.get('cluster')
            cluster_details = cache.get("cluster:%s:clusterdetails" % (cluster_slug))
            if not cluster_details:
                try:
                    cluster_details = clusterdetails_generator(cluster_slug)
                except GanetiApiError as e:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        '%s: %s' %
                        (
                            cluster_slug,
                            format_ganeti_api_error(e)
                        )
                    )
                except Exception as e:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        '%s' %
                        (
                            e
                        )
                    )
                cache.set("cluster:%s:clusterdetails" % (cluster_slug), cluster_details, 3600 * 24)
            return HttpResponse(
                json.dumps(cluster_details),
                content_type='application/json'
            )
    raise PermissionDenied
示例#2
0
def clusterdetails_json(request):
    if request.user.is_superuser or request.user.has_perm('ganeti.view_instances'):
        if request.GET.get('cluster'):
            cluster_slug = request.GET.get('cluster')
            cluster_details = cache.get("cluster:%s:clusterdetails" % (cluster_slug))
            if not cluster_details:
                try:
                    cluster_details = clusterdetails_generator(cluster_slug)
                except GanetiApiError as e:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        '%s: %s' %
                        (
                            cluster_slug,
                            format_ganeti_api_error(e)
                        )
                    )
                except Exception as e:
                    messages.add_message(
                        request,
                        messages.ERROR,
                        '%s' %
                        (
                            e
                        )
                    )
                cache.set("cluster:%s:clusterdetails" % (cluster_slug), cluster_details, 3600 * 24)
            return HttpResponse(
                json.dumps(cluster_details),
                content_type='application/json'
            )
    raise PermissionDenied
示例#3
0
 def _get_instances(cluster):
     try:
         instances.extend(cluster.get_user_instances(request.user))
     except GanetiApiError as e:
         bad_clusters.append((cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((cluster, e))
     finally:
         close_connection()
示例#4
0
 def _get_jobs(cluster):
     try:
         jobs.extend(cluster.get_job_list())
     except GanetiApiError as e:
         bad_clusters.append((cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((cluster, e))
     finally:
         close_old_connections()
示例#5
0
文件: jobs.py 项目: grnet/ganetimgr
 def _get_jobs(cluster):
     try:
         jobs.extend(cluster.get_job_list())
     except GanetiApiError as e:
         bad_clusters.append((cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((cluster, e))
     finally:
         close_old_connections()
示例#6
0
 def _get_instances(cluster):
     try:
         cluster_locked_nodes = cluster.locked_nodes_from_nodegroup()
         if cluster_locked_nodes:
             locked_clusters.append(str(cluster.description))
             locked_nodes.extend(cluster_locked_nodes)
         instances.extend(cluster.get_user_instances(request.user))
     except GanetiApiError as e:
         bad_clusters.append((cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((cluster, e))
     finally:
         close_old_connections()
示例#7
0
 def _get_instances(cluster):
         try:
             cluster_locked_nodes = cluster.locked_nodes_from_nodegroup()
             if cluster_locked_nodes:
                 locked_clusters.append(str(cluster.description))
                 locked_nodes.extend(cluster_locked_nodes)
             instances.extend(cluster.get_user_instances(request.user))
         except GanetiApiError as e:
             bad_clusters.append((cluster, format_ganeti_api_error(e)))
         except Exception as e:
             bad_clusters.append((cluster, e))
         finally:
             close_old_connections()
示例#8
0
 def _get_instance_details(instance):
     try:
         if locked_instances is not None and instance.name in locked_instances:
             instance.joblock = locked_instances["%s" % instance.name]
         else:
             instance.joblock = False
         instancedetails.extend(generate_json(instance, request.user, locked_nodes))
     except GanetiApiError as e:
         bad_clusters.append((cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((cluster, e))
     finally:
         close_connection()
示例#9
0
 def _get_instance_details(instance):
     try:
         if (locked_instances is not None
                 and instance.name in locked_instances):
             instance.joblock = locked_instances['%s' % instance.name]
         else:
             instance.joblock = False
         instancedetails.extend(
             generate_json(instance, request.user, locked_nodes))
     except GanetiApiError as e:
         bad_clusters.append((instance.cluster, format_ganeti_api_error(e)))
     except Exception as e:
         bad_clusters.append((instance.cluster, e))
     finally:
         close_old_connections()
示例#10
0
def get_cluster_node_group_stack(request):
    res = ''
    error = None
    cluster_id = request.GET.get('cluster_id', None)
    if cluster_id:
        cluster = get_object_or_404(Cluster, pk=cluster_id)
    else:
        return HttpResponseBadRequest()

    try:
        res = prepare_cluster_node_group_stack(cluster)
    except GanetiApiError as e:
        error = format_ganeti_api_error(e)
    except Exception as e:
        error = e
    if error:
        messages.add_message(request, messages.ERROR, error)
    return HttpResponse(json.dumps(res), content_type='application/json')
示例#11
0
def get_cluster_node_group_stack(request):
    res = ''
    error = None
    cluster_id = request.GET.get('cluster_id', None)
    if cluster_id:
        cluster = get_object_or_404(Cluster, pk=cluster_id)
    else:
        return HttpResponseBadRequest()

    try:
        res = prepare_cluster_node_group_stack(cluster)
    except GanetiApiError as e:
        error = format_ganeti_api_error(e)
    except Exception as e:
        error = e
    if error:
        messages.add_message(request, messages.ERROR, error)
    return HttpResponse(json.dumps(res), content_type='application/json')
示例#12
0
def get_user_group_list(request):
    if (
        request.user.is_superuser or
        request.user.has_perm('ganeti.view_instances')
    ):
        q_params = request.GET.get('q')
        type_of_search = request.GET.get('type')
        if not (q_params or type_of_search):
            return HttpResponseBadRequest()
        p = Pool(20)
        bad_clusters = []

        cache_key = "user:%s:index:instances" % request.user.username
        instances = cache.get(cache_key, [])

        def _get_instances(cluster):
            try:
                instances.extend(cluster.get_user_instances(request.user))
            except GanetiApiError as e:
                bad_clusters.append((cluster, format_ganeti_api_error(e)))
            except Exception as e:
                bad_clusters.append((cluster, e))
            finally:
                close_connection()


        if q_params and type_of_search:
            ret_list = []
            if type_of_search == 'cluster':
                clusters = Cluster.objects.filter(slug__icontains=q_params)
                for cluster in clusters:
                    cld = {}
                    cld['text'] = cluster.slug
                    cld['id'] = "c_%s" % cluster.pk
                    cld['type'] = "cluster"
                    ret_list.append(cld)
            elif type_of_search == 'users':
                users = User.objects.filter(is_active=True, username__icontains=q_params)
                for user in users:
                    userd = {}
                    userd['text'] = user.username
                    userd['email'] = user.email
                    userd['id'] = "u_%s" % user.pk
                    userd['type'] = "user"
                    ret_list.append(userd)
            elif type_of_search == 'groups':
                groups = Group.objects.filter(name__icontains=q_params)
                for group in groups:
                    groupd = {}
                    groupd['text'] = group.name
                    groupd['id'] = "g_%s" % group.pk
                    groupd['type'] = "group"
                    ret_list.append(groupd)
            elif type_of_search == 'instances':
                notif_instances = Instance.objects.filter(name__icontains=q_params)
                for instance in notif_instances:
                    instd = {}
                    instd['text'] = instance.name
                    instd['id'] = "i_%s" % instance.name
                    instd['type'] = "vm"
                    ret_list.append(instd)
            elif type_of_search == 'nodes':
                # get only enabled clusters
                for cluster in Cluster.objects.filter(disabled=False):
                    try:
                        for node in cluster.get_cluster_nodes():
                            if q_params in node.get('name'):
                                noded = {
                                    'text': '%s - %s' % (cluster, node.get('name')),
                                    'id': 'n_%s_c_%s' % (node.get('name'), cluster.id),
                                    'type': 'node'
                                }
                                ret_list.append(noded)
                    except GanetiApiError as e:
                        bad_clusters.append((cluster, format_ganeti_api_error(e)))
                    except Exception as e:
                        bad_clusters.append((cluster, e))

            elif type_of_search == 'nodegroups':
                nodegroups = []
                # get only enabled clusters
                for cluster in Cluster.objects.filter(disabled=False):
                    try:
                        nodegroups.append({cluster: cluster.get_node_groups()})
                    except GanetiApiError as e:
                        bad_clusters.append((cluster, format_ganeti_api_error(e)))
                    except Exception as e:
                        bad_clusters.append((cluster, e))

                for nodegroup_list in nodegroups:
                    for cluster, nodegroup in nodegroup_list.items():
                        for ng in nodegroup:
                            if q_params in ng.get('name'):
                                nodegroupsd = {
                                    'text': '%s - %s' % (cluster, ng.get('name')),
                                    'id': 'ng_%s_c_%s' % (ng.get('name'), cluster.id),
                                    'type': 'nodegroup'
                                }
                                ret_list.append(nodegroupsd)
        if bad_clusters:
            for c in list(set(bad_clusters)):
                message_text = "Some instances may be missing because the following clusters are unreachable: %s" % (
                    ", ".join(
                        [
                            "%s: %s" % (
                                c[0].description or c[0].hostname,
                                c[1]
                            )
                        ]
                    )
                )
                messages.add_message(request, messages.WARNING, message_text)


        action = ret_list
        return HttpResponse(json.dumps(action), mimetype='application/json')
    else:
        raise PermissionDenied()