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
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
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])), ) }, )
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])), ) }, )