--- /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()