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