merge latest Amisha changes
authorScott Baker <smbaker@gmail.com>
Fri, 23 May 2014 18:50:54 +0000 (11:50 -0700)
committerScott Baker <smbaker@gmail.com>
Fri, 23 May 2014 18:50:54 +0000 (11:50 -0700)
planetstack/core/plus/views.py
planetstack/templates/admin/dashboard/tenant.html

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 = []
index 88933a3..07d1e9c 100644 (file)
@@ -34,7 +34,7 @@
                                <select id="new-image" class="tenant-create-slice"></select>
                        </div>
                        <div class="create-slice-row">
-                                <label for="new-network">Network</label>
+                                <label for="new-network">Network Ports</label>
                                <input type="text" name="new-network" id="new-network">
                         </div>
                        <div class="create-slice-row">
                                                                serviceClass: $("#adv-service-level-dropdown").val(),
                                                                imageName: $("#adv-image-dropdown").val(),
                                                                dataSet: $("#adv-dataset-dropdown").val(),
+                                                               networkPorts:  $("#adv-network-value").val(),
+                                                               privateVolume: $("#private-vol-checkbox").is(":checked"),
                                                                 actionToDo: "update",
                                                                 csrfmiddlewaretoken: "{{ csrf_token }}", // < here
                                                                 state: "inactive"
@@ -462,7 +464,8 @@ location.reload();
                                                                        sliceName: $("#new-slice-name").val(),
                                                                        serviceClass: nameOfServiceClass,
                                                                        imageName: $("#new-image").val(),
-//                                                                     network: $("#new-network").val(),
+                                                                       network: $("#new-network").val(),
+                                                                       privateVolume: $("#private-vol").is(":checked"),
                                                                        mountDataSets: $("#mount-data-sets").val(),
                                                                        actionToDo: "add",
                                                                        csrfmiddlewaretoken: "{{ csrf_token }}", // < here