3 from sfa.rspecs.elements.sliver import Sliver
4 from sfa.rspecs.elements.SFAv1Node import SFVv1Node
6 class SFAv1Sliver(Sliver):
8 def get_sliver_elements(self, network=None):
10 slivers = self.root_node.xpath('//network[@name="%s"]//node/sliver' % network)
12 slivers = self.root_node.xpath('//node/sliver')
15 def get_slivers(self, network=None):
16 sliver_elems = self.get_sliver_elements(network)
17 slivers = [self.get_attributes(sliver_elem, recursive=True) \
18 for sliver_elem in sliver_elems]
21 def add_slivers(self, slivers, network=None):
22 if not isinstance(slivers, list):
24 nodes = SfaV1Node(self.root_node)
25 for sliver in slivers:
26 if isinstance(sliver, basestring):
27 sliver = {'hostname': sliver}
28 if 'hostname' in sliver:
29 node_elem = nodes.get_node_elements(hostnames=sliver['hostname'])
32 sliver_elem = self.add_element('sliver', parent=node_elem)
34 for tag in sliver['tags']:
35 self.add_element(tag['tagname'], parent=sliver_elem, text=tag['value'])
37 def remove_slivers(self, slivers, network=node):
38 nodes = SfaV1Node(self.root_node)
39 for sliver in slivers:
40 if isinstance(sliver, str):
43 hostname = sliver['hostname']
44 node_elem = nodes.get_node_elements(network=network, hostnames=hostname)
45 sliver_elem = node_elem.find('sliver')
46 if sliver_elem != None:
47 node_elem.remove(sliver_elem)
50 def get_sliver_defaults(self, network=None):
52 defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
54 defaults = self.xml.xpath("//network/sliver_defaults" % network)
55 return self.attributes_list(defaults)
57 def add_default_sliver_attribute(self, name, value, network=None):
59 defaults = self.xpath("//network[@name='%s']/sliver_defaults" % network)
61 defaults = self.xpath("//sliver_defaults" % network)
63 network_tag = self.xpath("//network[@name='%s']" % network)
64 if isinstance(network_tag, list):
65 network_tag = network_tag[0]
66 defaults = self.add_element('sliver_defaults', attrs={}, parent=network_tag)
67 elif isinstance(defaults, list):
68 defaults = defaults[0]
69 self.add_attribute(defaults, name, value)
71 def add_sliver_attribute(self, hostname, name, value, network=None):
72 node = self.get_node_elements(network, hostname)
73 sliver = node.find("sliver")
74 self.add_attribute(sliver, name, value)
76 def remove_default_sliver_attribute(self, name, value, network=None):
78 defaults = self.xpath("//network[@name='%s']/sliver_defaults" % network)
80 defaults = self.xpath("//sliver_defaults" % network)
81 self.remove_attribute(defaults, name, value)
83 def remove_sliver_attribute(self, hostname, name, value, network=None):
84 node = self.get_node_elements(network, hostname)
85 sliver = node.find("sliver")
86 self.remove_attribute(sliver, name, value)
89 if __name__ == '__main__':
91 from lxml import etree
95 root_node = etree.parse(filename)
96 network = SFAv1Node(root_node)
97 print network.get_nodes()