from lxml import etree
from sfa.util.xrn import hrn_to_urn, urn_to_hrn
+from sfa.util.plxrn import PlXrn
from sfa.rspecs.rspec_version import BaseVersion
from sfa.rspecs.rspec_elements import RSpecElement, RSpecElements
+from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
class SFAv1(BaseVersion):
enabled = True
namespace = None
extensions = {}
namespaces = None
- elements = [
- RSpecElement(RSpecElements.NETWORK, 'network', '//network'),
- RSpecElement(RSpecElements.NODE, 'node', '//node'),
- RSpecElement(RSpecElements.SLIVER, 'sliver', '//node/sliver'),
- ]
+ elements = []
template = '<RSpec type="%s"></RSpec>' % type
def get_network_elements(self):
return nodes
def get_links(self, network=None):
- if network:
- links = self.xml.xpath('//network[@name="%s"]/link' % network)
- else:
- links = self.xml.xpath('//link')
- linklist = []
- for link in links:
- (end1, end2) = link.get("endpoints").split()
- name = link.find("description")
- linklist.append((name.text,
- self.get_site_nodes(end1, network),
- self.get_site_nodes(end2, network)))
- return linklist
+ return PGv2Link.get_links(self.xml)
+
+ def get_link_requests(self):
+ return PGv2Link.get_links(self.xml)
def get_link(self, fromnode, tonode, network=None):
fromsite = fromnode.getparent()
node_tag.set('component_name', node['hostname'])
hostname_tag = etree.SubElement(node_tag, 'hostname').text = node['hostname']
if 'interfaces' in node:
+ i = 0
for interface in node['interfaces']:
if 'bwlimit' in interface and interface['bwlimit']:
bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').text = str(interface['bwlimit']/1000)
+ comp_id = PlXrn(auth=network, interface='node%s:eth%s' % (node['node_id'], i)).get_urn()
+ interface_tag = etree.SubElement(node_tag, 'interface', component_id=comp_id)
+ i+=1
if 'bw_unallocated' in node:
bw_unallocated = etree.SubElement(node_tag, 'bw_unallocated', units='kbps').text = str(node['bw_unallocated']/1000)
if 'tags' in node:
pass
def add_links(self, links):
- for link in links:
- network_tag = self.xml.root
- if link.component_manager_id != None:
- network_hrn, type = urn_to_hrn(link.component_manager_id)
- network_tag = self.add_network(network)
-
- link_elem = etree.SubElement(network_tag, 'link')
- link_elem.set('endpoints', '%s %s' % (link.endpoint1.name, link.endpoint2.name))
- description = etree.SubElement(link_elem, 'description').text = link.description
- bw_unallocated = etree.SubElement(link_elem, 'bw_unallocated', units='kbps').text = link.capacity
+ PGv2Link.add_links(self.xml, links)
def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False, append=False):
# add slice name to network tag
# remove all nodes without slivers
if not append:
for node in nodes_without_slivers:
- node_elem = self.get_node_element(node, network)
+ node_elem = self.get_node_element(node)
parent = node_elem.getparent()
parent.remove(node_elem)