from sfa.rspecs.rspec import RSpec
from sfa.util.xrn import *
from sfa.util.plxrn import hostname_to_urn
-from sfa.util.config import Config
+from sfa.util.config import Config
+from sfa.rspecs.rspec_version import RSpecVersion
+_version = { 'type': 'SFA',
+ 'version': '1'
+}
+
+sfa_rspec_version = RSpecVersion(_version)
+
class SfaRSpec(RSpec):
xml = None
header = '<?xml version="1.0"?>\n'
- namespaces = {}
- format = 'sfa'
+ version = sfa_rspec_version
+
+ def create(self):
+ RSpec.create(self)
+ self.xml.set('type', 'SFA')
+
###################
# Parser
###################
if 'interfaces' in node:
for interface in node['interfaces']:
if 'bwlimit' in interface and interface['bwlimit']:
- bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').tet = str(interface['bwlimit']/1000)
+ bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').text = str(interface['bwlimit']/1000)
if 'tags' in node:
for tag in node['tags']:
# expose this hard wired list of tags, plus the ones that are marked 'sfa' in their category
def add_links(self, links):
pass
- def add_slivers(self, slivers, network=None, no_dupes=False):
- if not isinstance(slivers, list):
- slivers = [slivers]
-
+ def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False):
+ slivers = self._process_slivers(slivers)
nodes_with_slivers = self.get_nodes_with_slivers(network)
for sliver in slivers:
if sliver['hostname'] in nodes_with_slivers:
sliver_elem = etree.SubElement(node_elem, 'sliver')
if 'tags' in sliver:
for tag in sliver['tags']:
- etree.SubElement(sliver_elem, tag['name'], value=tag['value'])
+ etree.SubElement(sliver_elem, tag['tagname'], value=tag['value'])
def remove_slivers(self, slivers, network=None, no_dupes=False):
- if not isinstance(slivers, list):
- slivers = [slivers]
+ slivers = self._process_slivers(slivers)
for sliver in slivers:
node_elem = self.get_node_element(sliver['hostname'], network)
- sliver_elem = node.find('sliver')
+ sliver_elem = node_elem.find('sliver')
if sliver_elem != None:
- node_elem.remove(sliver)
+ node_elem.remove(sliver_elem)
def add_default_sliver_attribute(self, name, value, network=None):
if network: