+ def get_site_nodes(self, siteid, network=None):
+ if network == None:
+ network = self.network
+ query = './network[@name="%s"]/site[@id="%s"]/node/hostname/text()' % (network, siteid)
+ result = self.rspec.xpath(query)
+ return result
+
+ def get_link_list(self, network=None):
+ if network == None:
+ network = self.network
+ linklist = []
+ links = self.rspec.iterfind("./network[@name='%s']/link" % network)
+ for link in links:
+ (end1, end2) = link.get("endpoints").split()
+ name = link.find("description")
+ linklist.append((name.text,
+ self.get_site_nodes(end1, network),
+ self.get_site_nodes(end2, network)))
+ return linklist
+
+ def get_vlink_list(self, network=None):
+ if network == None:
+ network = self.network
+ vlinklist = []
+ vlinks = self.rspec.iterfind("./network[@name='%s']//vlink" % network)
+ for vlink in vlinks:
+ endpoints = vlink.get("endpoints")
+ (end1, end2) = endpoints.split()
+ query = './network[@name="%s"]//node[@id="%s"]/hostname/text()' % network
+ node1 = self.rspec.xpath(query % end1)[0]
+ node2 = self.rspec.xpath(query % end2)[0]
+ desc = "%s <--> %s" % (node1, node2)
+ kbps = vlink.find("kbps")
+ vlinklist.append((endpoints, desc, kbps.text))
+ return vlinklist
+
+ def query_links(self, fromnode, tonode, network=None):
+ if network == None:
+ network = self.network
+ fromsite = fromnode.getparent()
+ tosite = tonode.getparent()
+ fromid = fromsite.get("id")
+ toid = tosite.get("id")
+
+ query = "./network[@name='%s']/link[@endpoints = '%s %s']" % (network, fromid, toid)
+ results = self.rspec.xpath(query)
+ if results == None:
+ query = "./network[@name='%s']/link[@endpoints = '%s %s']" % (network, toid, fromid)
+ results = self.rspec.xpath(query)
+ return results
+
+ def query_vlinks(self, endpoints, network=None):
+ if network == None:
+ network = self.network
+ query = "./network[@name='%s']//vlink[@endpoints = '%s']" % (network, endpoints)
+ results = self.rspec.xpath(query)
+ return results
+
+
+ def add_vlink(self, fromhost, tohost, kbps, network=None):
+ if network == None:
+ network = self.network
+ fromnode = self.get_node_element(fromhost, network)
+ tonode = self.get_node_element(tohost, network)
+ links = self.query_links(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)
+