rspec.add_links(self.links.values())
if slice_xrn:
+ # get slice details
slice_hrn, _ = urn_to_hrn(slice_xrn)
slice_name = hrn_to_pl_slicename(slice_hrn)
slices = self.api.plshell.GetSlices(self.api.plauth, slice_name)
if slices:
- slice = slices[0]
- hostnames = [self.nodes[node_id]['hostname'] for node_id in slice['node_ids']]
- rspec.add_slivers(hostnames)
+ slice = slices[0]
+ slivers = []
+ tags = self.api.plshell.GetSliceTags(self.api.plauth, slice['slice_tag_ids'])
+ for node_id in slice['node_ids']:
+ sliver = {}
+ sliver['hostname'] = self.nodes[node_id]['hostname']
+ sliver['tags'] = []
+ for tag in tags:
+ # if tag isn't bound to a node then it applies to all slivers
+ if not tag['node_id']:
+ sliver['tags'].append(tag)
+ else:
+ tag_host = self.nodes[tag['node_id']]['hostname']
+ if tag_host == sliver['hostname']:
+ sliver.tags.append(tag)
+ rspec.add_slivers(slivers)
return rspec.toxml()
#if 'interfaces' in node:
- def add_slivers(self, hostnames, check_for_dupes=False):
- if not isinstance(hostnames, list):
- hostnames = [hostnames]
+ def add_slivers(self, slivers, check_for_dupes=False):
+ if not isinstance(slivers, list):
+ slivers = [slivers]
nodes_with_slivers = self.get_nodes_with_slivers()
- for hostname in hostnames:
+ for sliver in slivers:
+ hostname = sliver['hostname']
if hostname in nodes_with_slivers:
continue
nodes = self.xml.xpath('//rspecv2:node[@component_name="%s"] | //node[@component_name="%s"]' % (hostname, hostname), namespaces=self.namespaces)
if 'interfaces' in node:
for interface in node['interfaces']:
if 'bwlimit' in interface and interface['bwlimit']:
- bwlimit = etree.SubElement(node_tag, 'bwlimit', units='kbps').tet = str(interface['bwlimit']/1000)
+ bwlimit = etree.SubElement(node_tag, 'bw_limit', units='kbps').tet = str(interface['bwlimit']/1000)
if 'tags' in node:
for tag in node['tags']:
# expose this hard wired list of tags, plus the ones that are marked 'sfa' in their category
def add_links(self, links):
pass
- def add_slivers(self, hostnames, network=None, no_dupes=False):
- if not isinstance(hostnames, list):
- hostnames = [hostnames]
+ def add_slivers(self, slivers, network=None, no_dupes=False):
+ if not isinstance(slivers, list):
+ slivers = [slivers]
nodes_with_slivers = self.get_nodes_with_slivers(network)
- for hostname in hostnames:
- if hostname in nodes_with_slivers:
+ for sliver in slivers:
+ if sliver['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 != None:
- node.remove(sliver)
+ node_elem = self.get_node_element(sliver['hostname'], network)
+ sliver_elem = etree.SubElement(node_elem, 'sliver')
+ if 'tags' in sliver:
+ for tag in sliver['tags']:
+ etree.SubElement(sliver_elem, tag['name'], value=tag['value']
+
+ def remove_slivers(self, slivers, network=None, no_dupes=False):
+ if not isinstance(slivers, list):
+ slivers = [slivers]
+ for sliver in slivers:
+ node_elem = self.get_node_element(sliver['hostname'], network)
+ sliver_elem = node.find('sliver')
+ if sliver_elem != None:
+ node_elem.remove(sliver)
def add_default_sliver_attribute(self, name, value, network=None):
if network: