+++ /dev/null
-from sfa.rspecs.elements.networks import Network
-
-class PGv2Network(Network):
-
- def get_networks_names(self):
- networks = self.xml.xpath('//rspecv2:node[@component_manager_id]/@component_manager_id', namespaces=self.namespaces)
- return list(set(networks))
+++ /dev/null
-#!/usr/bin/python
-from sfa.rspecs.elements.network import Network
-
-class SFAv1Network(Network):
-
- def get_network_elements(self):
- return self.root_node.xpath('//network')
-
- def get_networks(self):
- network_elems = self.get_network_elements()
- networks = [self.get_attributes(network_elem) \
- for network_elem in network_elems]
- return networks
-
- def add_networks(self, networks):
- if not isinstance(networks, list):
- networks = [networks]
- return self.add_element('network', {'id': network}, self.root_node)
-
-
-
-if __name__ == '__main__':
- import sys
- from lxml import etree
- args = sys.argv[1:]
- filename = args[0]
-
- root_node = etree.parse(filename)
- network = SFAv1Network(root_node)
- print network.get_networks()
-
-
+++ /dev/null
-#!/usr/bin/python
-
-from sfa.rspecs.elements.node import Node
-
-class SFAv1Node(Node):
-
- def get_node_elements(self, network=None, hostnames=None):
- if network:
- query = '//network[@name="%s"]//node' % network
- else:
- query = '//node'
-
- if isinstance(hostnames, str):
- query = query + '/hostname[text() = "%s"]' % hostnames
- elif isinstance(hostnames, list):
- query = query + '/hostname[contains( "%s" , text())]' \
- %(" ".join(hostnames))
-
- return self.xpath(query)
-
- def get_nodes(self, network=None, hostnames=None):
- node_elems = self.get_node_elements(network, hostnames)
- nodes = [self.get_attributes(node_elem, recursive=True) \
- for node_elem in node_elems]
- return nodes
-
- def add_nodes(self, nodes, network=None, no_dupes=False):
- if not isinstance(nodes, list):
- nodes = [nodes]
- for node in nodes:
- if no_dupes and \
- self.get_node_element(node['hostname']):
- # node already exists
- continue
-
- network_tag = self.root_node
- if 'network' in node:
- network = node['network']
- network_tags = self.root_node.xpath('//network[@name="%s"]' % network)
- if not network_tags:
- #network_tag = etree.SubElement(self.root_node, 'network', name=network)
- network_tag = self.add_element('network', {'name': network}, self.root_node)
- else:
- network_tag = network_tags[0]
-
- #node_tag = etree.SubElement(network_tag, 'node')
- node_tag = self.add_element('node', parent=network_tag)
- if 'network' in node:
- node_tag.set('component_manager_id', network)
- if 'urn' in node:
- node_tag.set('component_id', node['urn'])
- if 'site_urn' in node:
- node_tag.set('site_id', node['site_urn'])
- if 'node_id' in node:
- node_tag.set('node_id', 'n'+str(node['node_id']))
- if 'hostname' in node:
- #hostname_tag = etree.SubElement(node_tag, 'hostname').text = node['hostname']
- hostname_tag = self.add_element('hostname', parent=node_tag)
- hostname_tag.text = node['hostname']
- 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').text = str(interface['bwlimit']/1000)
- bwlimit_tag = self.add_element('bw_limit', {'units': 'kbps'}, parent=node_tag)
- bwlimit_tag.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
- if tag['tagname'] in ['fcdistro', 'arch'] or 'sfa' in tag['category'].split('/'):
- #tag_element = etree.SubElement(node_tag, tag['tagname'], value=tag['value'])
- tag_element = self.add_element(tag['tagname'], parent=node_tag)
- tag_element.text = tag['value']
-
- if 'site' in node:
- longitude = str(node['site']['longitude'])
- latitude = str(node['site']['latitude'])
- #location = etree.SubElement(node_tag, 'location', country='unknown', \
- # longitude=longitude, latitude=latitude)
- location_attrs = {'country': 'unknown', 'longitude': longitude, 'latitude': latitude}
- self.add_element('location', location_attrs, node_tag)
-
-if __name__ == '__main__':
- import sys
- from lxml import etree
- args = sys.argv[1:]
- filename = args[0]
-
- root_node = etree.parse(filename)
- network = SFAv1Node(root_node)
- print network.get_nodes()
+++ /dev/null
-#!/usr/bin/python
-
-from sfa.rspecs.elements.sliver import Sliver
-from sfa.rspecs.elements.SFAv1Node import SFVv1Node
-
-class SFAv1Sliver(Sliver):
-
- def get_sliver_elements(self, network=None):
- if network:
- slivers = self.root_node.xpath('//network[@name="%s"]//node/sliver' % network)
- else:
- slivers = self.root_node.xpath('//node/sliver')
- return slivers
-
- def get_slivers(self, network=None):
- sliver_elems = self.get_sliver_elements(network)
- slivers = [self.get_attributes(sliver_elem, recursive=True) \
- for sliver_elem in sliver_elems]
- return slivers
-
- def add_slivers(self, slivers, network=None):
- if not isinstance(slivers, list):
- slivers = [slivers]
- nodes = SfaV1Node(self.root_node)
- for sliver in slivers:
- if isinstance(sliver, basestring):
- sliver = {'hostname': sliver}
- if 'hostname' in sliver:
- node_elem = nodes.get_node_elements(hostnames=sliver['hostname'])
- if node_elem:
- node_elem[0]
- sliver_elem = self.add_element('sliver', parent=node_elem)
- if 'tags' in sliver:
- for tag in sliver['tags']:
- self.add_element(tag['tagname'], parent=sliver_elem, text=tag['value'])
-
- def remove_slivers(self, slivers, network=node):
- nodes = SfaV1Node(self.root_node)
- for sliver in slivers:
- if isinstance(sliver, str):
- hostname = sliver
- else:
- hostname = sliver['hostname']
- node_elem = nodes.get_node_elements(network=network, hostnames=hostname)
- sliver_elem = node_elem.find('sliver')
- if sliver_elem != None:
- node_elem.remove(sliver_elem)
-
-
- def get_sliver_defaults(self, network=None):
- if network:
- defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
- else:
- defaults = self.xml.xpath("//network/sliver_defaults" % network)
- return self.attributes_list(defaults)
-
- def add_default_sliver_attribute(self, name, value, network=None):
- if network:
- defaults = self.xpath("//network[@name='%s']/sliver_defaults" % network)
- else:
- defaults = self.xpath("//sliver_defaults" % network)
- if not defaults:
- network_tag = self.xpath("//network[@name='%s']" % network)
- if isinstance(network_tag, list):
- network_tag = network_tag[0]
- defaults = self.add_element('sliver_defaults', attrs={}, parent=network_tag)
- elif isinstance(defaults, list):
- defaults = defaults[0]
- self.add_attribute(defaults, name, value)
-
- def add_sliver_attribute(self, hostname, name, value, network=None):
- node = self.get_node_elements(network, hostname)
- sliver = node.find("sliver")
- self.add_attribute(sliver, name, value)
-
- def remove_default_sliver_attribute(self, name, value, network=None):
- if network:
- defaults = self.xpath("//network[@name='%s']/sliver_defaults" % network)
- else:
- defaults = self.xpath("//sliver_defaults" % network)
- self.remove_attribute(defaults, name, value)
-
- def remove_sliver_attribute(self, hostname, name, value, network=None):
- node = self.get_node_elements(network, hostname)
- sliver = node.find("sliver")
- self.remove_attribute(sliver, name, value)
-
-
-if __name__ == '__main__':
- import sys
- from lxml import etree
- args = sys.argv[1:]
- filename = args[0]
-
- root_node = etree.parse(filename)
- network = SFAv1Node(root_node)
- print network.get_nodes()