3 from sfa.rspecs.elements.node import Node
7 def get_node_elements(self, network=None):
9 nodes = self.root_node.xpath('//network[@name="%s"]//node' % network)
11 nodes = self.root_node.xpath('//node')
14 def get_nodes(self, network=None):
15 node_elems = self.get_node_elements(network)
16 nodes = [self.get_attributes(node_elem, recursive=True) \
17 for node_elem in node_elems]
20 def add_nodes(self, nodes, network=None, no_dupes=False):
21 if not isinstance(nodes, list):
25 self.get_node_element(node['hostname']):
29 network_tag = self.root_node
31 network = node['network']
32 network_tags = self.root_node.xpath('//network[@name="%s"]' % network)
34 #network_tag = etree.SubElement(self.root_node, 'network', name=network)
35 network_tag = self.add_element('network', {'name': network}, self.root_node)
37 network_tag = network_tags[0]
39 #node_tag = etree.SubElement(network_tag, 'node')
40 node_tag = self.add_element('node', parent=network_tag)
42 node_tag.set('component_manager_id', network)
44 node_tag.set('component_id', node['urn'])
45 if 'site_urn' in node:
46 node_tag.set('site_id', node['site_urn'])
48 node_tag.set('node_id', 'n'+str(node['node_id']))
49 if 'hostname' in node:
50 #hostname_tag = etree.SubElement(node_tag, 'hostname').text = node['hostname']
51 hostname_tag = self.add_element('hostname', parent=node_tag)
52 hostname_tag.text = node['hostname']
53 if 'interfaces' in node:
54 for interface in node['interfaces']:
55 if 'bwlimit' in interface and interface['bwlimit']:
56 #bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').text = str(interface['bwlimit']/1000)
57 bwlimit_tag = self.add_element('bw_limit', {'units': 'kbps'}, parent=node_tag)
58 bwlimit_tag.text = str(interface['bwlimit']/1000)
60 for tag in node['tags']:
61 # expose this hard wired list of tags, plus the ones that are marked 'sfa' in their category
62 if tag['tagname'] in ['fcdistro', 'arch'] or 'sfa' in tag['category'].split('/'):
63 #tag_element = etree.SubElement(node_tag, tag['tagname'], value=tag['value'])
64 tag_element = self.add_element(tag['tagname'], parent=node_tag)
65 tag_element.text = tag['value']
68 longitude = str(node['site']['longitude'])
69 latitude = str(node['site']['latitude'])
70 #location = etree.SubElement(node_tag, 'location', country='unknown', \
71 # longitude=longitude, latitude=latitude)
72 location_attrs = {'country': 'unknown', 'longitude': longitude, 'latitude': latitude}
73 self.add_element('location', location_attrs, node_tag)
75 if __name__ == '__main__':
77 from lxml import etree
81 root_node = etree.parse(filename)
82 network = SFAv1Node(root_node)
83 print network.get_nodes()