Configure bandwidth limit for slice with auto topology creation
Andy Bavier [Tue, 27 Apr 2010 18:14:35 +0000 (18:14 +0000)]
create-topo-attributes.py
topology.py

index 5f42684..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)
 
         
@@ -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:
@@ -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
index 104100c..9ee7e41 100755 (executable)
@@ -34,3 +34,5 @@ links = [(2, 12),  # I2 Princeton - New York
          (20, 21), # I2 Los Angeles - Seattle
          (20, 22), # I2 Los Angeles - Salt Lake City
          (21, 22)] # I2 Seattle - Salt Lake City
+
+bwlimits = {}