merge latest Amisha changes
[plstackapi.git] / planetstack / core / plus / views.py
index 2b7bf38..2fcef20 100644 (file)
@@ -161,24 +161,42 @@ class TenantCreateSlice(View):
         serviceClass = request.POST.get("serviceClass", "0")
         imageName = request.POST.get("imageName", "0")
         actionToDo = request.POST.get("actionToDo", "0")
-        #network = request.POST.get("network","0")
+        networkPorts = request.POST.get("network","0")
         mountDataSets = request.POST.get("mountDataSets","0")
+        privateVolume = request.POST.get("privateVolume","0")
         if (actionToDo == "add"):
            serviceClass = ServiceClass.objects.get(name=serviceClass)
            site = request.user.site
            image = Image.objects.get(name=imageName)
            newSlice = Slice(name=sliceName,serviceClass=serviceClass,site=site,imagePreference=image,mountDataSets=mountDataSets)
            newSlice.save()
+          privateTemplate="Private"
+          publicTemplate="Public shared IPv4"\r
+          privateNetworkName = sliceName+"-"+privateTemplate\r
+          publicNetworkName = sliceName+"-"+publicTemplate\r
+          slice=Slice.objects.get(name=sliceName)\r
+          addNetwork(privateNetworkName,privateTemplate,slice)\r
+          addNetwork(publicNetworkName,publicTemplate,slice)\r
+          addOrModifyPorts(networkPorts,sliceName)\r
+          if privateVolume=="true":\r
+               privateVolForSlice(request.user,sliceName)
         return HttpResponse("Slice created")
 
+def privateVolForSlice(user,sliceName):
+       if not hasPrivateVolume(sliceName):\r
+          volumeName=createPrivateVolume(user,sliceName)\r
+          readWrite="true"\r
+          mountVolume(sliceName,volumeName,readWrite)
+
 class TenantUpdateSlice(View):
     def post(self, request, *args, **kwargs):\r
         sliceName = request.POST.get("sliceName", "0")\r
         serviceClass = request.POST.get("serviceClass", "0")\r
         imageName = request.POST.get("imageName", "0")\r
         actionToDo = request.POST.get("actionToDo", "0")\r
-        #network = request.POST.get("network","0")\r
+        networkPorts = request.POST.get("networkPorts","0")\r
         dataSet = request.POST.get("dataSet","0")\r
+        privateVolume = request.POST.get("privateVolume","0")\r
         slice = Slice.objects.all()\r
         for entry in slice:\r
                 serviceClass = ServiceClass.objects.get(name=serviceClass)\r
@@ -186,12 +204,39 @@ class TenantUpdateSlice(View):
                          if (actionToDo == "update"):\r
                                 setattr(entry,'serviceClass',serviceClass)\r
                                 setattr(entry,'imagePreference',imageName)\r
-                                #setattr(entry,'network',network)\r
                                 setattr(entry,'mountDataSets',dataSet)\r
                                 entry.save()\r
                                 break\r
+       addOrModifyPorts(networkPorts,sliceName)\r
+       if privateVolume=="true":\r
+                privateVolForSlice(request.user,sliceName)\r
         return HttpResponse("Slice updated")\r
 \r
+def addNetwork(name,template,sliceName):\r
+       networkTemplate=NetworkTemplate.objects.get(name=template)\r
+       newNetwork = Network(name = name,\r
+                              template = networkTemplate,\r
+                              owner = sliceName)\r
+        newNetwork.save()\r
+       addNetworkSlice(newNetwork,sliceName)\r
+\r
+def addNetworkSlice(networkSlice,sliceName):\r
+       newNetworkSlice=NetworkSlice(network =networkSlice,\r
+                                    slice=sliceName)\r
+       newNetworkSlice.save()\r
+\r
+def addOrModifyPorts(networkPorts,sliceName):\r
+       networkList = Network.objects.all()\r
+        networkInfo = []\r
+        if networkPorts:\r
+           for networkEntry in networkList:\r
+               networkSlices = networkEntry.slices.all()\r
+               for slice in networkSlices:\r
+                   if slice.name==sliceName:\r
+                          if networkEntry.template.name=="Public shared IPv4":\r
+                             setattr(networkEntry,'ports',networkPorts)\r
+                             networkEntry.save()\r
+\r
 def getTenantSliceInfo(user, tableFormat = False):
     tenantSliceDetails = {}
     tenantSliceData = getTenantInfo(user)
@@ -203,7 +248,6 @@ def getTenantSliceInfo(user, tableFormat = False):
        tenantSliceDetails['userSliceInfo'] = tenantSliceData
     tenantSliceDetails['sliceServiceClass']=userSliceTableFormatter(tenantServiceClassData)
     tenantSliceDetails['image']=userSliceTableFormatter(getImageInfo(user))
-    #tenantSliceDetails['network']=userSliceTableFormatter(getNetworkInfo(user))
     tenantSliceDetails['deploymentSites']=userSliceTableFormatter(getDeploymentSites())
     tenantSliceDetails['sites'] = userSliceTableFormatter(getTenantSitesInfo())
     tenantSliceDetails['mountDataSets'] = userSliceTableFormatter(getMountDataSets())
@@ -218,13 +262,14 @@ def getTenantInfo(user):
        slice = Slice.objects.get(name=Slice.objects.get(id=entry.id).name)
        sliceServiceClass = entry.serviceClass.name
        preferredImage =  entry.imagePreference
-       sliceDataSet = entry.mountDataSets
-       #sliceNetwork = entry.network
+       #sliceDataSet = entry.mountDataSets
+       sliceNetwork = {}
        numSliver = 0
        sliceImage=""
        sliceSite = {}
        sliceNode = {}
        sliceInstance= {}
+       #createPrivateVolume(user,sliceName)
        for sliver in slice.slivers.all():
            if sliver.node.site.name in BLESSED_SITES:
                 sliceSite[sliver.node.site.name] = sliceSite.get(sliver.node.site.name,0) + 1
@@ -232,7 +277,7 @@ def getTenantInfo(user):
                 sliceNode[str(sliver)] = sliver.node.name
        numSliver = sum(sliceSite.values())
        numSites = len(sliceSite)
-       userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage,'numOfSites':numSites, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfSlivers':numSliver,'sliceDataSet':sliceDataSet,'instanceNodePair':sliceNode})
+       userSliceInfo.append({'sliceName': sliceName,'sliceServiceClass': sliceServiceClass,'preferredImage':preferredImage,'numOfSites':numSites, 'sliceSite':sliceSite,'sliceImage':sliceImage,'numOfSlivers':numSliver,'instanceNodePair':sliceNode})
     return userSliceInfo
 
 def getTenantSitesInfo():
@@ -279,6 +324,7 @@ def createPrivateVolume(user, sliceName):
            getattr(Volume.default_gateway_caps,"host files")
     v = Volume(name="private_" + sliceName, owner_id=user, description="private volume for %s" % sliceName, blocksize=61440, private=True, archive=False, default_gateway_caps = caps)
     v.save()
+    return v
 
 SYNDICATE_REPLICATE_PORTNUM = 1025
 
@@ -289,6 +335,8 @@ def get_free_port():
         inuse[vs.peer_portnum]=True
         inuse[vs.replicate_portnum]=True
     for network in Network.objects.all():
+        if not network_ports:
+            continue
         network_ports = [x.strip() for x in network.ports.split(",")]
         for network_port in network_ports:
             try:
@@ -326,15 +374,6 @@ def getMountDataSets():
 \r
         return dataSetInfo
 
-def getNetworkInfo(user):
-   #networkList = Network.objects.all()
-    networkList = ['Private Only','Private and Publicly Routable']
-    networkInfo = []
-    for networkEntry in networkList:
-          #networkInfo.append({'Network':networkEntry.name})
-          networkInfo.append({'Network':networkEntry})
-    return networkInfo
-
 def getDeploymentSites():
     deploymentList = Deployment.objects.all()
     deploymentInfo = []