+ nodes_with_slivers = self.get_nodes_with_slivers(network)
+ for hostname in hostnames:
+ if hostname in nodes_with_slivers:
+ continue
+ node = self.get_node_element(hostname, network)
+ etree.SubElement(node, 'sliver')
+
+ def remove_slivers(self, hostnames, network=None, no_dupes=False):
+ if not isinstance(hostnames, list):
+ hostnames = [hostnames]
+ for hostname in hostnames:
+ node = self.get_node_element(hostname, network)
+ sliver = node.find('sliver')
+ if sliver:
+ node.remove(sliver)
+
+ def add_default_sliver_attribute(self, name, value, network=None):
+ if network:
+ defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
+ else:
+ defaults = self.xml.xpath("//sliver_defaults" % network)
+ if defaults is None:
+ defaults = etree.Element("sliver_defaults")
+ network = self.xml.xpath("//network[@name='%s']" % network)
+ network.insert(0, defaults)
+ self.add_attribute(defaults, name, value)
+
+ def add_sliver_attribute(self, hostname, name, value, network=None):
+ node = self.get_node_element(hostname, network)
+ sliver = node.find("sliver")
+ self.add_attribute(sliver, name, value)
+
+ def remove_default_sliver_attribute(self, name, value, network=None):
+ if network:
+ defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
+ else:
+ defaults = self.xml.xpath("//sliver_defaults" % network)
+ self.remove_attribute(defaults, name, value)