user's can't set/unset site in Login Details without the proper authorization
[plstackapi.git] / planetstack / tests / GetConfiguration.py
index 0dda316..55d2467 100644 (file)
@@ -10,6 +10,8 @@ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
 from openstack.manager import OpenStackManager
 from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice
 
 from openstack.manager import OpenStackManager
 from core.models import Slice, Sliver, ServiceClass, Reservation, Tag, Network, User, Node, Image, Deployment, Site, NetworkTemplate, NetworkSlice
 
+slice_name_map = {}
+
 def ps_id_to_pl_id(x):
     # Since we don't want the PlanetStack object IDs to conflict with existing
     # PlanetLab object IDs in the CMI, just add 100000 to the PlanetStack object
 def ps_id_to_pl_id(x):
     # Since we don't want the PlanetStack object IDs to conflict with existing
     # PlanetLab object IDs in the CMI, just add 100000 to the PlanetStack object
@@ -19,6 +21,16 @@ def ps_id_to_pl_id(x):
 def pl_id_to_ps_id(x):
     return x - 100000
 
 def pl_id_to_ps_id(x):
     return x - 100000
 
+def pl_slice_id(slice):
+    if slice.name.startswith("princeton_vcoblitz"):
+        # 70 is the slice id of princeton_vcoblitz on vicci
+        return 70
+    else:
+        return ps_id_to_pl_id(slice.id)
+
+def ps_slicename_to_pl_slicename(x):
+    return slice_name_map.get(x,x)
+
 def filter_fields(src, fields):
     dest = {}
     for (key,value) in src.items():
 def filter_fields(src, fields):
     dest = {}
     for (key,value) in src.items():
@@ -36,7 +48,7 @@ def GetSlices(filter={}):
 
         slice = {"instantiation": "plc-instantiated",
                  "description": "planetstack slice",
 
         slice = {"instantiation": "plc-instantiated",
                  "description": "planetstack slice",
-                 "slice_id": ps_id_to_pl_id(ps_slice.id),
+                 "slice_id": pl_slice_id(ps_slice),
                  "node_ids": node_ids,
                  "url": "planetstack",
                  "max_nodes": 1000,
                  "node_ids": node_ids,
                  "url": "planetstack",
                  "max_nodes": 1000,
@@ -44,20 +56,23 @@ def GetSlices(filter={}):
                  "slice_tag_ids": [],
                  "peer_id": None,
                  "site_id": ps_id_to_pl_id(ps_slice.site_id),
                  "slice_tag_ids": [],
                  "peer_id": None,
                  "site_id": ps_id_to_pl_id(ps_slice.site_id),
-                 "name": ps_slice.name}
+                 "name": ps_slicename_to_pl_slicename(ps_slice.name)}
 
                  # creator_person_id, person_ids, expires, created
 
         slices.append(slice)
     return slices
 
 
                  # creator_person_id, person_ids, expires, created
 
         slices.append(slice)
     return slices
 
-def GetNodes(node_ids, fields=None):
-    ps_nodes = Node.objects.filter(id__in=[pl_id_to_ps_id(nid) for nid in node_ids])
+def GetNodes(node_ids=None, fields=None):
+    if node_ids:
+        ps_nodes = Node.objects.filter(id__in=[pl_id_to_ps_id(nid) for nid in node_ids])
+    else:
+        ps_nodes = Node.objects.all()
     nodes = []
     for ps_node in ps_nodes:
         slice_ids=[]
         for ps_sliver in ps_node.slivers.all():
     nodes = []
     for ps_node in ps_nodes:
         slice_ids=[]
         for ps_sliver in ps_node.slivers.all():
-            slice_ids.append(ps_id_to_pl_id(ps_sliver.slice.id))
+            slice_ids.append(pl_slice_id(ps_sliver.slice))
 
         node = {"node_id": ps_id_to_pl_id(ps_node.id),
                 "site_id": ps_id_to_pl_id(ps_node.site_id),
 
         node = {"node_id": ps_id_to_pl_id(ps_node.id),
                 "site_id": ps_id_to_pl_id(ps_node.site_id),
@@ -90,7 +105,7 @@ def GetSites():
     for ps_site in ps_sites:
         slice_ids=[]
         for ps_slice in ps_site.slices.all():
     for ps_site in ps_sites:
         slice_ids=[]
         for ps_slice in ps_site.slices.all():
-            slice_ids.append(ps_id_to_pl_id(ps_slice.id))
+            slice_ids.append(pl_slice_id(ps_slice))
 
         node_ids=[]
         for ps_node in ps_site.nodes.all():
 
         node_ids=[]
         for ps_node in ps_site.nodes.all():
@@ -149,6 +164,22 @@ def GetInterfaces(slicename, node_ids):
                 interfaces.append(interface)
     return interfaces
 
                 interfaces.append(interface)
     return interfaces
 
+def find_multi_slicename(orig_slicename):
+    """
+         Because we sometimes have issues deleting a slice in planetstack and
+         creating a new one, allow us to use a prefix match, that way someone
+         can put a version number of the end of the slicename
+    """
+    global slice_name_map
+    slices = Slice.objects.filter()
+    for slice in slices:
+        if slice.name.startswith(orig_slicename):
+            slice_name_map[slice.name] = orig_slicename
+            return slice.name
+
+    return orig_slicename
+
+
 def GetConfiguration(name):
     slicename = name["name"]
     if "node_id" in name:
 def GetConfiguration(name):
     slicename = name["name"]
     if "node_id" in name:
@@ -156,6 +187,8 @@ def GetConfiguration(name):
     else:
         node_id = 0
 
     else:
         node_id = 0
 
+    slicename = find_multi_slicename(slicename)
+
     node_sliver_tags = GetTags(slicename, node_id)
 
     slices = GetSlices({"name": slicename})
     node_sliver_tags = GetTags(slicename, node_id)
 
     slices = GetSlices({"name": slicename})
@@ -205,7 +238,21 @@ def GetConfiguration(name):
             'nodes': nodes}
 
 if __name__ == '__main__':
             'nodes': nodes}
 
 if __name__ == '__main__':
-    print GetConfiguration({"name": "smbaker-coblitz"})
+    find_multi_slicename("princeton_vcoblitz")  # set up the mapping for princeton_vcoblitz2 -> princeton_vcoblitz
 
 
+    slices = GetSlices()
+    nodes = GetNodes()
 
 
+    if ("-d" in sys.argv):
+        config = GetConfiguration({"name": "princeton_vcoblitz"})
+        print config
+        print slices
+        print nodes
+    else:
+        configs={}
+        for slicename in ["princeton_vcoblitz"]:
+            configs[slicename] = GetConfiguration({"name": slicename})
 
 
+        file("planetstack_config","w").write(json.dumps(configs))
+        file("planetstack_slices","w").write(json.dumps(slices))
+        file("planetstack_nodes","w").write(json.dumps(nodes))