Esempio n. 1
0
def book_openflow(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)
    enable_simple_mode = not check_existing_flowspace_in_slice(slice)

    if request.method == "POST":
        _update_openflow_resources(request, slice)
        _update_planetlab_resources(request, slice)

        slice.modified = True
        slice.save()
        free_vlan = 'None'
        alertMessage = ''
        request.method

        fsmode = request.POST['fsmode']
        vlan_range = request.POST.get('selected_vlan_range')
        if not vlan_range:
            vlan_range = 1
        if fsmode == 'simple' and enable_simple_mode:
            try:
                #free_vlan = calculate_free_vlan(slice)
                manager = VlanManager()
                free_vlan = manager.process(slice,int(vlan_range)) 
            except Exception as e:
                fsmode = 'failed'
                DatedMessage.objects.post_message_to_user(
                         "Could not find free vlan to slice your experiment in all the affected AMs",
                         request.user, msg_type=DatedMessage.TYPE_ERROR,
                     )
                alertMessage = "Could not find free vlan to slice your experiment in all the affected AMs. It has been switched to advanced mode, choose your flowspace and wait for the admins decision."
  
            return flowspace(request, slice_id, fsmode, free_vlan, alertMessage)
        else:
            return HttpResponseRedirect(reverse("flowspace",
                                            args=[slice_id]))
    else:
        ui_extra_context = {
            "slice": slice,
            "enable_simple_mode":enable_simple_mode,
            "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])),
                ("Allocate Openflow and PlanetLab resources", reverse("book_openflow", args=[slice_id])),
            )
        }

        # Need to show topology for own plugin? Call to main method to get EVERY resource
        from expedient.clearinghouse.urls import TOPOLOGY_GENERATOR
        return simple.direct_to_template(
            request,
            template = "openflow_select_resources.html",
            # TopologyGenerator class instance
            extra_context = dict(TOPOLOGY_GENERATOR.load_ui_data(slice).items() + ui_extra_context.items()),
        )
def detail(request, slice_id):
    '''Show information about the slice'''
    slice = get_object_or_404(Slice, id=slice_id)

    must_have_permission(request.user, slice.project, "can_view_project")    
    resource_list = [rsc.as_leaf_class() for rsc in slice.resource_set.all()]

    user_profile = UserProfile.get_or_create_profile(request.user)
    user_urn = user_profile.urn
    user_cert = user_profile.certificate
    #creds = get_slice_credentials(slice.project.urn, slice.urn, user_urn, user_cert)
    #print_debug_message(str(creds))

    template_list_computation = []
    template_list_network = []
    template_list_aggregate = []
    for plugin in PLUGIN_LOADER.plugin_settings:
        try:
            plugin_dict = PLUGIN_LOADER.plugin_settings.get(plugin)
            # Get templates according to the plugin category ('computation' or 'network')
            # instead of directly using "TEMPLATE_RESOURCES" settings
            if plugin_dict.get("general").get("resource_type") == "computation":
                template_list_computation.append(plugin_dict.get("paths").get("template_resources"))
            elif plugin_dict.get("general").get("resource_type") == "network":
                template_list_network.append(plugin_dict.get("paths").get("template_resources"))
            elif plugin_dict.get("general").get("resource_type") == "aggregate":
                template_list_aggregate.append(plugin_dict.get("paths").get("template_resources"))
        except Exception as e:
            print "[WARNING] Could not obtain template to add resources to slides in plugin '%s'. Details: %s" % (str(plugin), str(e))

    plugin_context = TOPOLOGY_GENERATOR.load_ui_data(slice)

#    if not plugin_context['d3_nodes'] or not plugin_context['d3_links']:
#        template_list_computation = []
#        template_list_network = []

    extra_context={
            "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_list": resource_list,
            "plugin_template_list_aggregate": template_list_aggregate,
            "plugin_template_list_network": template_list_network,
            "plugin_template_list_computation": template_list_computation,
            "plugins_path": PLUGIN_LOADER.plugins_path,
    }

    return list_detail.object_detail(
        request,
        Slice.objects.all(),
        object_id=slice_id,
        template_name=TEMPLATE_PATH+"/detail.html",
        template_object_name="slice",
	extra_context=dict(extra_context.items()+plugin_context.items())
    )
Esempio n. 3
0
def detail(request, slice_id):
    '''Show information about the slice'''
    slice = get_object_or_404(Slice, id=slice_id)

    must_have_permission(request.user, slice.project, "can_view_project")
    resource_list = [rsc.as_leaf_class() for rsc in slice.resource_set.all()]

    template_list_computation = []
    template_list_network = []
    for plugin in PLUGIN_LOADER.plugin_settings:
        try:
            plugin_dict = PLUGIN_LOADER.plugin_settings.get(plugin)
            # Get templates according to the plugin category ('computation' or 'network')
            # instead of directly using "TEMPLATE_RESOURCES" settings
            if plugin_dict.get("general").get(
                    "resource_type") == "computation":
                template_list_computation.append(
                    plugin_dict.get("paths").get("template_resources"))
            elif plugin_dict.get("general").get("resource_type") == "network":
                template_list_network.append(
                    plugin_dict.get("paths").get("template_resources"))
        except Exception as e:
            print "[WARNING] Could not obtain template to add resources to slides in plugin '%s'. Details: %s" % (
                str(plugin), str(e))

    plugin_context = TOPOLOGY_GENERATOR.load_ui_data(slice)

    #    if not plugin_context['d3_nodes'] or not plugin_context['d3_links']:
    #        template_list_computation = []
    #        template_list_network = []

    extra_context = {
        "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_list":
        resource_list,
        "plugin_template_list_network":
        template_list_network,
        "plugin_template_list_computation":
        template_list_computation,
        "plugins_path":
        PLUGIN_LOADER.plugins_path,
    }

    return list_detail.object_detail(
        request,
        Slice.objects.all(),
        object_id=slice_id,
        template_name=TEMPLATE_PATH + "/detail.html",
        template_object_name="slice",
        extra_context=dict(extra_context.items() + plugin_context.items()))
Esempio n. 4
0
def book_openflow(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)
    enable_simple_mode = not check_existing_flowspace_in_slice(slice)

    if request.method == "POST":
        _update_openflow_resources(request, slice)
        _update_planetlab_resources(request, slice)

        slice.modified = True
        slice.save()
        free_vlan = 'None'
        alertMessage = ''
        request.method

        fsmode = request.POST['fsmode']
        vlan_range = request.POST.get('selected_vlan_range')
        if not vlan_range:
            vlan_range = 1
        if fsmode == 'simple' and enable_simple_mode:
            try:
                #free_vlan = calculate_free_vlan(slice)
                manager = VlanManager()
                free_vlan = manager.process(slice, int(vlan_range))
            except Exception as e:
                fsmode = 'failed'
                DatedMessage.objects.post_message_to_user(
                    "Could not find free VLAN(s) to slice your experiment in all the affected AMs",
                    request.user,
                    msg_type=DatedMessage.TYPE_ERROR,
                )
                alertMessage = "Could not find free VLAN(s) to slice your experiment in all the affected AMs. Please choose a suitable flowspace in the advanced mode, using a VLAN up to 4095, and wait for the admins' decision."

            return flowspace(request, slice_id, fsmode, free_vlan,
                             alertMessage)
        else:
            return HttpResponseRedirect(reverse("flowspace", args=[slice_id]))
    else:
        ui_extra_context = {
            "slice":
            slice,
            "enable_simple_mode":
            enable_simple_mode,
            "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])),
                ("Allocate Openflow and PlanetLab resources",
                 reverse("book_openflow", args=[slice_id])),
            )
        }

        # Need to show topology for own plugin? Call to main method to get EVERY resource
        from expedient.clearinghouse.urls import TOPOLOGY_GENERATOR
        return simple.direct_to_template(
            request,
            template="openflow_select_resources.html",
            # TopologyGenerator class instance
            extra_context=dict(
                TOPOLOGY_GENERATOR.load_ui_data(slice).items() +
                ui_extra_context.items()),
        )