コード例 #1
0
ファイル: views.py プロジェクト: fp7-alien/C-BAS
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()),
        )
コード例 #2
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()]

    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())
    )
コード例 #3
0
ファイル: views.py プロジェクト: pentikousis/C-BAS-framework
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()))
コード例 #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()),
        )