+ 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 != None:
+ 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)
+
+ def remove_sliver_attribute(self, hostname, name, value, network=None):
+ node = self.get_node_element(hostname, network)
+ sliver = node.find("sliver")
+ self.remove_attribute(sliver, name, value)
+
+ def add_vlink(self, fromhost, tohost, kbps, network=None):
+ fromnode = self.get_node_element(fromhost, network)
+ tonode = self.get_node_element(tohost, network)
+ links = self.get_link(fromnode, tonode, network)
+
+ for link in links:
+ vlink = etree.SubElement(link, "vlink")
+ fromid = fromnode.get("id")
+ toid = tonode.get("id")
+ vlink.set("endpoints", "%s %s" % (fromid, toid))
+ self.add_attribute(vlink, "kbps", kbps)
+
+
+ def remove_vlink(self, endpoints, network=None):
+ vlinks = self.query_vlinks(endpoints, network)
+ for vlink in vlinks:
+ vlink.getparent().remove(vlink)
+
+
+ def merge(self, in_rspec):
+ """
+ Merge contents for specified rspec with current rspec
+ """
+
+ # just copy over all networks
+ current_networks = self.get_networks()
+ rspec = SfaRSpec(rspec=in_rspec)
+ networks = rspec.get_network_elements()
+ for network in networks:
+ current_network = network.get('name')
+ if not current_network in current_networks:
+ self.xml.append(network)
+ current_networks.append(current_network)
+
+