Пример #1
0
def getUIdata(request, slice):
    """
    Returns information  
    """
    slice_id = slice.id
    checked_ids = list(
        OpenFlowInterface.objects.filter(slice_set=slice).values_list(
            "id", flat=True))
    checked_ids.extend(
        PlanetLabNode.objects.filter(slice_set=slice).values_list("id",
                                                                  flat=True))

    aggs_filter = (Q(leaf_name=OpenFlowAggregate.__name__.lower())
                   | Q(leaf_name=GCFOpenFlowAggregate.__name__.lower()))
    of_aggs = \
            slice.aggregates.filter(aggs_filter)
    pl_aggs = \
            slice.aggregates.filter(
                leaf_name=PlanetLabAggregate.__name__.lower())

    vt_aggs = \
            slice.aggregates.filter(
                leaf_name=VtPlugin.__name__.lower())
    for agg in vt_aggs:
        vtPlugin = agg.as_leaf_class()
        askForAggregateResources(
            vtPlugin,
            projectUUID=Project.objects.filter(id=slice.project_id)[0].uuid,
            sliceUUID=slice.uuid)

    gfs_list = []
    for of_agg in of_aggs:
        gfs = of_agg.as_leaf_class().get_granted_flowspace(
            of_agg.as_leaf_class()._get_slice_id(slice))
        gfs_list.append([of_agg.id, gfs])

    nIslands, d3_nodes, d3_links = _get_nodes_links(of_aggs, pl_aggs, vt_aggs,
                                                    slice_id)
    tree_rsc_ids = _get_tree_ports(of_aggs, pl_aggs)

    fsquery = FlowSpaceRule.objects.filter(
        slivers__slice=slice).distinct().order_by('id')

    return {
        "nIslands": nIslands,
        "d3_nodes": d3_nodes,
        "d3_links": d3_links,
        "tree_rsc_ids": tree_rsc_ids,
        "openflow_aggs": of_aggs,
        "planetlab_aggs": pl_aggs,
        "vt_aggs": vt_aggs,
        "slice": slice,
        "checked_ids": checked_ids,
        "allfs": fsquery,
        "gfs_list": gfs_list,
        "ofswitch_class": OpenFlowSwitch,
        "planetlab_node_class": PlanetLabNode,
    }
def get_vm_aggregates(slice):
    vt_aggs = slice.aggregates.filter(leaf_name=VtPlugin.__name__.lower())
    try:
        from vt_plugin.controller.vtAggregateController.vtAggregateController import askForAggregateResources
        for agg in vt_aggs:
            vtPlugin = agg.as_leaf_class()
            project_uuid = Project.objects.filter(id = slice.project_id)[0].uuid
            askForAggregateResources(vtPlugin, projectUUID = project_uuid, sliceUUID = slice.uuid)
    except:
        pass
    return vt_aggs
Пример #3
0
def get_vm_aggregates(slice):
    vt_aggs = slice.aggregates.filter(leaf_name=VtPlugin.__name__.lower())
    try:
        from vt_plugin.controller.vtAggregateController.vtAggregateController import askForAggregateResources
        for agg in vt_aggs:
            vtPlugin = agg.as_leaf_class()
            project_uuid = Project.objects.filter(id=slice.project_id)[0].uuid
            askForAggregateResources(vtPlugin,
                                     projectUUID=project_uuid,
                                     sliceUUID=slice.uuid)
    except:
        pass
    return vt_aggs
    def processResponse(response):
        print "Entra en processResponse\n"
        for action in response.action:

            #if Action.objects.filter(uuid = action.id).exists():
            if Action.objects.filter(uuid=action.id):
                #actionModel is an instance to the action stored in DB with uuid the same as the incomming action
                actionModel = Action.objects.get(uuid=action.id)
            else:
                actionModel = Translator.ActionToModel(action,
                                                       "provisioning",
                                                       save="noSave")
                #TODO adapt code in order to enter "if" when received SUCCESS status from actions generated by island manager
                actionModel.status = 'QUEUED'  #this state is just to enter de if later
                actionModel.vm = VM.objects.get(
                    uuid=action.server.virtual_machines[0].uuid)

            if actionModel.status is 'QUEUED' or 'ONGOING':
                print "The response is:"
                print actionModel
                print actionModel.uuid
                print "actionModel.status = %s" % actionModel.status

                #update action status in DB
                actionModel.status = action.status
                print "The action.status is %s" % action.status
                print "The action.description is %s" % action.description
                actionModel.description = action.description
                actionModel.save()

                #according to incoming action response we do update the vm state
                if actionModel.status == 'SUCCESS':
                    if actionModel.type == 'create':
                        actionModel.vm.setState('created (stopped)')
                        actionModel.vm.save()
                    elif actionModel.type == 'start' or actionModel.type == 'reboot':
                        actionModel.vm.setState('running')
                        actionModel.vm.save()
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'delete':
                        actionModel.vm.completeDelete()

                    if actionModel.description == None:
                        actionModel.description = ""
                    else:
                        actionModel.description = ": " + actionModel.description
                    if actionModel.requestUser:
                        DatedMessage.objects.post_message_to_user(
                            "Action %s on VM %s succeed %s" %
                            (actionModel.type, actionModel.vm.name,
                             actionModel.description),
                            actionModel.requestUser,
                            msg_type=DatedMessage.TYPE_SUCCESS,
                        )
                    else:
                        project = Project.objects.get(
                            uuid=actionModel.vm.getProjectId())
                        for user in project.members_as_permittees.all():
                            DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s succeed %s" %
                                (actionModel.type, actionModel.vm.name,
                                 actionModel.description),
                                user,
                                msg_type=DatedMessage.TYPE_SUCCESS,
                            )

                elif actionModel.status == 'FAILED':
                    if actionModel.description == None:
                        actionModel.description = ""
                    else:
                        actionModel.description = ": " + actionModel.description

                    if actionModel.requestUser:
                        DatedMessage.objects.post_message_to_user(
                            "Action %s on VM %s failed: %s" %
                            (actionModel.type, actionModel.vm.name,
                             actionModel.description),
                            actionModel.requestUser,
                            msg_type=DatedMessage.TYPE_ERROR,
                        )
                    else:
                        project = Project.objects.get(
                            uuid=actionModel.vm.getProjectId())
                        for user in project.members_as_permittees.all():
                            DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s failed: %s" %
                                (actionModel.type, actionModel.vm.name,
                                 actionModel.description),
                                user,
                                msg_type=DatedMessage.TYPE_ERROR,
                            )

                    if actionModel.type == 'start':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('running')
                        actionModel.vm.save()
                    elif actionModel.type == 'reboot':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'create':
                        ProvisioningDispatcher.cleanWhenFail(
                            actionModel.vm,
                            VTServer.objects.get(uuid=actionModel.vm.serverID))
                    else:
                        actionModel.vm.setState('failed')
                        actionModel.vm.save()

                elif actionModel.status == 'ONGOING':
                    if actionModel.type == 'create':
                        actionModel.vm.setState('creating...')
                        actionModel.vm.save()
                        vtplugin = VtPlugin.objects.get(
                            id=actionModel.vm.aggregate_id)
                        projectUUID = actionModel.vm.projectId
                        sliceUUID = actionModel.vm.sliceId
                        vtAggregateController.askForAggregateResources(
                            vtplugin, projectUUID, sliceUUID)

                    elif actionModel.type == 'start':
                        actionModel.vm.setState('starting...')
                        actionModel.vm.save()
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('stopping...')
                        actionModel.vm.save()
                    elif actionModel.type == 'delete':
                        actionModel.vm.setState('deleting...')
                        actionModel.vm.save()
                    elif actionModel.type == 'reboot':
                        actionModel.vm.setState('rebooting...')
                        actionModel.vm.save()

                    #if actionModel.requestUser:
                    #    DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            actionModel.requestUser, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                    #else:
                    #    project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                    #    for user in project.members_as_permittees.all():
                    #        DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            user, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )

                else:
                    actionModel.vm.setState('unknown')
                    actionModel.vm.save()

                    #if actionModel.requestUser:
                    #    DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            actionModel.requestUser, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                    #else:
                    #    project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                    #    for user in project.members_as_permittees.all():
                    #        DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            user, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                return "Done Response"

            else:
                try:
                    raise Exception
                except Exception as e:
                    print e
                    return
    def processResponse(response):
        for action in response.action:

            #if Action.objects.filter(uuid = action.id).exists():
            if Action.objects.filter(uuid = action.id):
                #actionModel is an instance to the action stored in DB with uuid the same as the incomming action
                actionModel = Action.objects.get(uuid = action.id)
            else:                
                actionModel =Translator.ActionToModel(action, "provisioning", save = "noSave")
                #TODO adapt code in order to enter "if" when received SUCCESS status from actions generated by island manager
                actionModel.status = 'QUEUED' #this state is just to enter de if later
                actionModel.vm = VM.objects.get(uuid = action.server.virtual_machines[0].uuid)
                
            if actionModel.status is 'QUEUED' or 'ONGOING':                
                print "The response is:"
                print actionModel
                print actionModel.uuid
                print "actionModel.status = %s" %actionModel.status

                #update action status in DB
                actionModel.status = action.status
                print "The action.status is %s" %action.status
                print "The action.description is %s" %action.description
                actionModel.description = action.description
                actionModel.save()
                
                #according to incoming action response we do update the vm state
                if actionModel.status == 'SUCCESS':
                    if actionModel.type == 'create':
                        actionModel.vm.setState('created (stopped)')
                        actionModel.vm.save()
                    elif actionModel.type == 'start' or actionModel.type == 'reboot':
                        actionModel.vm.setState('running')
                        actionModel.vm.save()                        
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'delete':
                        actionModel.vm.completeDelete()

                    if actionModel.description == None: 
                        actionModel.description = "" 
                    else: 
                        actionModel.description = ": "+actionModel.description
                    if actionModel.requestUser:
                        DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s succeed %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                                actionModel.requestUser, msg_type=DatedMessage.TYPE_SUCCESS,
                            )
                    else:
                        project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                        for user in project.members_as_permittees.all():
                            DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s succeed %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                                user, msg_type=DatedMessage.TYPE_SUCCESS,
                            )

                elif actionModel.status == 'FAILED':
                    if actionModel.description == None:     
                        actionModel.description = ""    
                    else:    
                        actionModel.description = ": "+actionModel.description

                    if actionModel.requestUser:
                        DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s failed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                                actionModel.requestUser, msg_type=DatedMessage.TYPE_ERROR,
                            )
                    else:
                        project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                        for user in project.members_as_permittees.all():
                            DatedMessage.objects.post_message_to_user(
                                "Action %s on VM %s failed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                                user, msg_type=DatedMessage.TYPE_ERROR,
                            )


                    if actionModel.type == 'start':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('running')
                        actionModel.vm.save()
                    elif actionModel.type == 'reboot':
                        actionModel.vm.setState('stopped')
                        actionModel.vm.save()
                    elif actionModel.type == 'create':
                        ProvisioningDispatcher.cleanWhenFail(actionModel.vm, VTServer.objects.get(uuid = actionModel.vm.serverID))
                    else:
                        actionModel.vm.setState('failed')
                        actionModel.vm.save()


                elif actionModel.status == 'ONGOING':
                    if actionModel.type == 'create':
                        actionModel.vm.setState('creating...')
                        actionModel.vm.save()
                        vtplugin = VtPlugin.objects.get(id=actionModel.vm.aggregate_id)
                        projectUUID = actionModel.vm.projectId
                        sliceUUID = actionModel.vm.sliceId
                        vtAggregateController.askForAggregateResources(vtplugin,projectUUID,sliceUUID)	

                    elif actionModel.type == 'start':
                        actionModel.vm.setState('starting...')
                        actionModel.vm.save()
                    elif actionModel.type == 'hardStop':
                        actionModel.vm.setState('stopping...')
                        actionModel.vm.save()
                    elif actionModel.type == 'delete':
                        actionModel.vm.setState('deleting...')
                        actionModel.vm.save()
                    elif actionModel.type == 'reboot':
                        actionModel.vm.setState('rebooting...')
                        actionModel.vm.save()

                    #if actionModel.requestUser:
                    #    DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            actionModel.requestUser, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                    #else:
                    #    project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                    #    for user in project.members_as_permittees.all():
                    #        DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            user, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )

                else:                    
                    actionModel.vm.setState('unknown')
                    actionModel.vm.save()
                
                    #if actionModel.requestUser:
                    #    DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            actionModel.requestUser, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                    #else:
                    #    project = Project.objects.get(uuid=actionModel.vm.getProjectId())
                    #    for user in project.members_as_permittees.all():
                    #        DatedMessage.objects.post_message_to_user(
                    #            "Action %s on VM %s succeed: %s" % (actionModel.type, actionModel.vm.name, actionModel.description),
                    #            user, msg_type=DatedMessage.TYPE_SUCCESS,
                    #        )
                return "Done Response"

            else:
                try:
                    raise Exception
                except Exception as e:
                    print e
                    return
Пример #6
0
def home(request, slice_id):
    """
    Display the list of all the resources  
    """

    slice = get_object_or_404(Slice, id=slice_id)
    if request.method == "POST":

        _update_openflow_resources(request, slice)
        _update_planetlab_resources(request, slice)

        slice.modified = True
        slice.save()

        return HttpResponseRedirect(
            reverse("html_plugin_flowspace", args=[slice_id]))
    else:
        checked_ids = list(
            OpenFlowInterface.objects.filter(slice_set=slice).values_list(
                "id", flat=True))
        checked_ids.extend(
            PlanetLabNode.objects.filter(slice_set=slice).values_list(
                "id", flat=True))

        aggs_filter = (Q(leaf_name=OpenFlowAggregate.__name__.lower())
                       | Q(leaf_name=GCFOpenFlowAggregate.__name__.lower()))
        of_aggs = \
            slice.aggregates.filter(aggs_filter)
        pl_aggs = \
            slice.aggregates.filter(
                leaf_name=PlanetLabAggregate.__name__.lower())

        vt_aggs = \
            slice.aggregates.filter(
                leaf_name=VtPlugin.__name__.lower())
        for agg in vt_aggs:
            vtPlugin = agg.as_leaf_class()
            askForAggregateResources(vtPlugin,
                                     projectUUID=Project.objects.filter(
                                         id=slice.project_id)[0].uuid,
                                     sliceUUID=slice.uuid)

        gfs_list = []
        for of_agg in of_aggs:
            gfs = of_agg.as_leaf_class().get_granted_flowspace(
                of_agg.as_leaf_class()._get_slice_id(slice))
            gfs_list.append([of_agg.id, gfs])

        nIslands, d3_nodes, d3_links = _get_nodes_links(
            of_aggs, pl_aggs, vt_aggs, slice_id)
        tree_rsc_ids = _get_tree_ports(of_aggs, pl_aggs)

        fsquery = FlowSpaceRule.objects.filter(
            slivers__slice=slice).distinct().order_by('id')

        return simple.direct_to_template(
            request,
            template="expedient/clearinghouse/slice/detail.html",
            extra_context={
                "nIslands":
                nIslands,
                "d3_nodes":
                d3_nodes,
                "d3_links":
                d3_links,
                "tree_rsc_ids":
                tree_rsc_ids,
                "openflow_aggs":
                of_aggs,
                "planetlab_aggs":
                pl_aggs,
                "vt_aggs":
                vt_aggs,
                "slice":
                slice,
                "checked_ids":
                checked_ids,
                "allfs":
                fsquery,
                "gfs_list":
                gfs_list,
                "ofswitch_class":
                OpenFlowSwitch,
                "planetlab_node_class":
                PlanetLabNode,
                "breadcrumbs": (
                    ("Home", reverse("home")),
                    ("Project %s" % slice.project.name,
                     reverse("project_detail", args=[slice.project.id])),
                    ("Slice %s" % slice.name,
                     reverse("slice_detail", args=[slice_id])),
                    #("Resource visualization panel ", reverse("html_plugin_home", args=[slice_id])),
                )
            },
        )
Пример #7
0
def bookOpenflow(request, slice_id):
    """
    Display the list of planetlab and openflow aggregates and their resources.
    On submit, create slivers and make reservation.
    """

    slice = get_object_or_404(Slice, id=slice_id)
    if request.method == "POST":

        _update_openflow_resources(request, slice)
        _update_planetlab_resources(request, slice)

        slice.modified = True
        slice.save()

        return HttpResponseRedirect(
            reverse("html_plugin_flowspace", args=[slice_id]))
    else:
        checked_ids = list(
            OpenFlowInterface.objects.filter(slice_set=slice).values_list(
                "id", flat=True))
        checked_ids.extend(
            PlanetLabNode.objects.filter(slice_set=slice).values_list(
                "id", flat=True))

        aggs_filter = (Q(leaf_name=OpenFlowAggregate.__name__.lower())
                       | Q(leaf_name=GCFOpenFlowAggregate.__name__.lower()))
        of_aggs = \
            slice.aggregates.filter(aggs_filter)
        pl_aggs = \
            slice.aggregates.filter(
                leaf_name=PlanetLabAggregate.__name__.lower())

        vt_aggs = \
            slice.aggregates.filter(
                leaf_name=VtPlugin.__name__.lower())

        for agg in vt_aggs:
            vtPlugin = agg.as_leaf_class()
            askForAggregateResources(vtPlugin,
                                     projectUUID=Project.objects.filter(
                                         id=slice.project_id)[0].uuid,
                                     sliceUUID=slice.uuid)


#        vm = VM.objects.filter(sliceId=slice.uuid)

        nIslands, d3_nodes, d3_links = _get_nodes_links(
            of_aggs, pl_aggs, vt_aggs, slice_id)
        tree_rsc_ids = _get_tree_ports(of_aggs, pl_aggs)

        return simple.direct_to_template(
            request,
            template="html/select_resources.html",
            extra_context={
                "nIslands":
                nIslands,
                "d3_nodes":
                d3_nodes,
                "d3_links":
                d3_links,
                "tree_rsc_ids":
                tree_rsc_ids,
                "openflow_aggs":
                of_aggs,
                "planetlab_aggs":
                pl_aggs,
                "vt_aggs":
                vt_aggs,
                "slice":
                slice,
                "checked_ids":
                checked_ids,
                "ofswitch_class":
                OpenFlowSwitch,
                "planetlab_node_class":
                PlanetLabNode,
                #                "virtualmachines": vm,
                "breadcrumbs": (
                    ("Home", reverse("home")),
                    ("Project %s" % slice.project.name,
                     reverse("project_detail", args=[slice.project.id])),
                    ("Slice %s" % slice.name,
                     reverse("slice_detail", args=[slice_id])),
                    #("Resource visualization panel ", reverse("html_plugin_home", args=[slice_id])),
                    ("Allocate Openflow and PlanetLab resources",
                     reverse("html_plugin_bookOpenflow", args=[slice_id])),
                )
            },
        )