Changes for 2.6.32 kernel
[nodemanager-topo.git] / create-topo-attributes.py
index f0c95e2..78d965e 100755 (executable)
@@ -8,7 +8,7 @@ slices that have an EGRE key.  This script to be run from a cron job.
 
 import string
 import socket
-from topology import links
+from topology import links, bwlimits
 
 class Node:
     def __init__(self, node):
@@ -61,11 +61,11 @@ class Node:
     def init_rspecs(self):
         self.rspecs = []
         
-    def add_rspec(self, remote):
+    def add_rspec(self, remote, bw):
         my_ip = self.get_virt_ip(remote)
         remote_ip = remote.get_virt_ip(self)
         net = self.get_virt_net(remote)
-        rspec = remote.id, remote.ipaddr, "1Mbit", my_ip, remote_ip, net
+        rspec = remote.id, remote.ipaddr, bw, my_ip, remote_ip, net
         self.rspecs.append(rspec)
 
         
@@ -119,8 +119,8 @@ class Slice:
         else:
             record['node_id'] = None
         tag = Slicetag(record)
-        slicetags[id] = tag
-        self.slice_tag_ids.append(id)
+        slicetags[tag.id] = tag
+        self.slice_tag_ids.append(tag.id)
         tag.changed = True       
         tag.updated = True
         return tag
@@ -167,7 +167,7 @@ class Slice:
                 if cap == "CAP_NET_ADMIN":
                     return
             else:
-                newcaps = "CAP_NET_ADMIN," + caps
+                newcaps = "CAP_NET_ADMIN," + tag.value
                 self.update_tag('capabilities', newcaps, slicetags)
         else:
             self.add_tag('capabilities', 'CAP_NET_ADMIN', slicetags)
@@ -234,9 +234,15 @@ class Slicetag:
                 else:
                     AddSliceTag(self.slice_id, self.tagname, self.value, self.node_id)
             elif self.deleted and int(self.id) > 0:
-                DeleteSliceTag(self.id)
+                try:
+                    DeleteSliceTag(self.id)
+                except:
+                    print "[%s] %s: could not delete" % (self.id, self.tagname)
         else:
-            slice = slices[self.slice_id].name
+            try:
+                slice = slices[self.slice_id].name
+            except:
+                return
             if self.node_id:
                 node = nodes[tag.node_id].hostname
             if self.updated:
@@ -297,8 +303,8 @@ def get_slice_tags():
 Find a free EGRE key
 """
 def free_egre_key(slicetags):
+    used = set()
     for i in slicetags:
-        used = set()
         tag = slicetags[i]
         if tag.tagname == 'egre_key':
             used.add(int(tag.value))
@@ -357,6 +363,11 @@ for i in slices:
         if dryrun:
             print "Building virtual topology for %s" % slice.name
             
+        if slice.name in bwlimits:
+            bw = bwlimits[slice.name]
+        else:
+            bw = "1Mbit"
+
         hosts = "127.0.0.1\t\tlocalhost\n"
         """
         For each node in the slice, check whether the slice is running on any
@@ -366,7 +377,7 @@ for i in slices:
             node.init_rspecs()
             adj_nodes = node.adjacent_nodes(sites, nodes, slice.node_ids)
             for adj in adj_nodes:
-                node.add_rspec(adj)
+                node.add_rspec(adj, bw)
                 hosts += "%s\t\t%s\n" % (node.get_virt_ip(adj), node.shortname)
             if node.rspecs:
                 topo_str = "%s" % node.rspecs
@@ -378,9 +389,10 @@ for i in slices:
             print "Slice %s not using IIAS" % slice.name
 
     if topo_type == 'manual' and slice.get_tag('egre_key', slicetags):
-        topo_tag = slice.get_tag('topo_rspec', slicetags)
-        if topo_tag:
-            topo_tag.updated = True
+        for node in slice.get_nodes(nodes):
+            topo_tag = slice.get_tag('topo_rspec', slicetags, node)
+            if topo_tag:
+                topo_tag.updated = True
             
 # Update the tag values in the database
 for i in slicetags: