From e4deddd4c02041d9e6857e5d55565e0d62885322 Mon Sep 17 00:00:00 2001 From: Scott Baker Date: Mon, 14 Apr 2014 16:48:05 -0700 Subject: [PATCH] add noAct argument, return list of modified sites in result --- planetstack/core/plus/views.py | 57 +++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/planetstack/core/plus/views.py b/planetstack/core/plus/views.py index ff5877e..ac0bfd2 100644 --- a/planetstack/core/plus/views.py +++ b/planetstack/core/plus/views.py @@ -263,7 +263,9 @@ def tenant_pick_sites(user, user_ip=None, slice=None, count=None): return sites -def tenant_increase_slivers(user, user_ip, siteList, slice, count): +def tenant_increase_slivers(user, user_ip, siteList, slice, count, noAct=False): + sitesChanged = {} + # let's compute how many slivers are in use in each node of each site for site in siteList: site.nodeList = list(site.nodes.all()) @@ -284,20 +286,27 @@ def tenant_increase_slivers(user, user_ip, siteList, slice, count): print "adding sliver at node", node.name, "of site", node.site.name - sliver = Sliver(name=node.name, - slice=slice, - node=node, - image = Image.objects.all()[0], - creator = User.objects.get(email=user), - deploymentNetwork=node.deployment, - numberCores =1 ) - sliver.save() + if not noAct: + sliver = Sliver(name=node.name, + slice=slice, + node=node, + image = Image.objects.all()[0], + creator = User.objects.get(email=user), + deploymentNetwork=node.deployment, + numberCores =1 ) + sliver.save() node.sliverCount = node.sliverCount + 1 count = count - 1 -def tenant_decrease_slivers(user, siteList, slice, count): + sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) + 1 + + return sitesChanged + +def tenant_decrease_slivers(user, siteList, slice, count, noAct=False): + sitesChanged = {} + if siteList: siteNames = [site.name for site in siteList] else: @@ -310,15 +319,35 @@ def tenant_decrease_slivers(user, siteList, slice, count): node = sliver.node if (not siteNames) or (node.site.name in siteNames): print "deleting sliver", sliver, "at node", node.name, "of site", node.site.name - sliver.delete() + if not noAct: + sliver.delete() count = count -1 + sitesChanged[node.site.name] = sitesChanged.get(node.site.name,0) - 1 + + return sitesChanged + class TenantAddOrRemoveSliverView(View): + """ Add or remove slivers from a Slice + + Arguments: + siteName - name of site. If not specified, PlanetStack will pick the + best site., + actionToDo - [add | rem] + count - number of slivers to add or remove + sliceName - name of slice + noAct - if set, no changes will be made to db + + Returns: + Dictionary of sites that were modified, and the count of nodes + that were added or removed at each site. + """ def post(self, request, *args, **kwargs): siteName = request.POST.get("siteName", None) actionToDo = request.POST.get("actionToDo", None) count = int(request.POST.get("count","0")) sliceName = request.POST.get("slice", None) + noAct = request.POST.get("noAct", False) if not sliceName: return HttpResponseServerError("No slice name given") @@ -335,13 +364,13 @@ class TenantAddOrRemoveSliverView(View): if (siteList is None): siteList = tenant_pick_sites(user, user_ip, slice, count) - tenant_increase_slivers(request.user, user_ip, siteList, slice, count) + sitesChanged = tenant_increase_slivers(request.user, user_ip, siteList, slice, count, noAct) elif (actionToDo == "rem"): - tenant_decrease_slivers(request.user, siteList, slice, count) + sitesChanged = tenant_decrease_slivers(request.user, siteList, slice, count, noAct) else: return HttpResponseServerError("Unknown actionToDo %s" % actionToDo) - return HttpResponse('Operation Completed') + return HttpResponse(json.dumps(sitesChanged), mimetype='application/javascript') def get(self, request, *args, **kwargs): request.POST = request.GET -- 2.43.0