From cbfcd01963fd69149937551f9d225ec825554384 Mon Sep 17 00:00:00 2001 From: Andy Bavier Date: Fri, 21 Aug 2009 19:11:59 +0000 Subject: [PATCH] Manually generate XML rather than using Rspec() class, so that XSugar works --- sfa/rspecs/aggregates/rspec_manager_vini.py | 11 +- sfa/rspecs/aggregates/vini/utils.py | 131 +++++++++++++++++++- 2 files changed, 133 insertions(+), 9 deletions(-) diff --git a/sfa/rspecs/aggregates/rspec_manager_vini.py b/sfa/rspecs/aggregates/rspec_manager_vini.py index ab82c136..e5199708 100644 --- a/sfa/rspecs/aggregates/rspec_manager_vini.py +++ b/sfa/rspecs/aggregates/rspec_manager_vini.py @@ -134,23 +134,18 @@ def create_slice_vini_aggregate(api, hrn, nodes): return 1 def get_rspec(api, hrn): - rspec = ViniRspec() - topo = Topology(api) - - rspec.updateCapacity(topo) - + topo = Topology(api) if (hrn): slicename = hrn_to_pl_slicename(hrn) slice = get_slice(api, slicename) if slice: slice.hrn = hrn topo.nodeTopoFromSliceTags(slice) - rspec.updateRequest(slice, topo) else: # call the default sfa.plc.nodes.get_rspec() method return Nodes(api).get_rspec(hrn) - return rspec.toxml() + return topo.toxml(hrn) """ @@ -197,7 +192,7 @@ def create_slice(api, hrn, xml): else: raise PermissionError("%s not in VINI whitelist" % hrn) - rspec = ViniRspec(xml) + rspec = Rspec(xml) topo = Topology(api) topo.nodeTopoFromRspec(rspec) diff --git a/sfa/rspecs/aggregates/vini/utils.py b/sfa/rspecs/aggregates/vini/utils.py index 57a010fd..94e64bf7 100644 --- a/sfa/rspecs/aggregates/vini/utils.py +++ b/sfa/rspecs/aggregates/vini/utils.py @@ -2,6 +2,68 @@ import re import socket from sfa.rspecs.aggregates.vini.topology import * +default_topo_xml = """ + + i2atla1 + i2chic1 + 1Mbit + + + i2atla1 + i2hous1 + 1Mbit + + + i2atla1 + i2wash1 + 1Mbit + + + i2chic1 + i2kans1 + 1Mbit + + + i2chic1 + i2wash1 + 1Mbit + + + i2hous1 + i2kans1 + 1Mbit + + + i2hous1 + i2losa1 + 1Mbit + + + i2kans1 + i2salt1 + 1Mbit + + + i2losa1 + i2salt1 + 1Mbit + + + i2losa1 + i2seat1 + 1Mbit + + + i2newy1 + i2wash1 + 1Mbit + + + i2salt1 + i2seat1 + 1Mbit + """ + # Taken from bwlimit.py # # See tc_util.c and http://physics.nist.gov/cuu/Units/binary.html. Be @@ -153,7 +215,7 @@ class Site: def __init__(self, site): self.id = site['site_id'] self.node_ids = site['node_ids'] - self.name = site['abbreviated_name'] + self.name = site['abbreviated_name'].replace(" ", "_") self.tag = site['login_base'] self.public = site['is_public'] self.links = set() @@ -460,6 +522,73 @@ class Topology: if tag.tagname == 'topo_rspec' and not tag.updated: tag.delete() tag.write(self.api) + + def toxml(self, hrn = None): + xml = """ + + + """ + + for site in self.getSites(): + if not site.public: + continue + + xml += """ + """ % site.name + + for node in site.get_sitenodes(self.nodes): + if not node.tag: + continue + + xml += """ + + %s + %s + """ % (node.tag, node.hostname, format_tc_rate(node.bps)) + xml += """ + """ + + for link in self.sitelinks: + xml += """ + + %s + %s + %s + """ % (link.end1.name, link.end2.name, format_tc_rate(link.bps)) + + + if hrn: + name = hrn + else: + name = 'default_topology' + xml += """ + + + + """ % name + + if hrn: + for link in self.nodelinks: + xml += """ + + %s + %s + %s + """ % (link.end1.tag, link.end2.tag, format_tc_rate(link.bps)) + else: + xml += default_topo_xml + + xml += """ + + +""" + + # Remove all leading whitespace and newlines + lines = xml.split("\n") + noblanks = "" + for line in lines: + noblanks += line.strip() + return noblanks """ -- 2.43.0