nodes = self.xml.xpath('//node/hostname/text()')
else:
nodes = self.xml.xpath('//network[@name="%s"]//node/hostname/text()' % network)
+
+ nodes = [node.strip() for node in nodes]
return nodes
def get_nodes_with_slivers(self, network = None):
if network:
- return self.xml.xpath('//network[@name="%s"]//node[sliver]/hostname/text()' % network)
+ nodes = self.xml.xpath('//network[@name="%s"]//node[sliver]/hostname/text()' % network)
else:
- return self.xml.xpath('//node[sliver]/hostname/text()')
+ nodes = self.xml.xpath('//node[sliver]/hostname/text()')
+ nodes = [node.strip() for node in nodes]
+ return nodes
def get_nodes_without_slivers(self, network=None):
xpath_nodes_without_slivers = '//node[not(sliver)]/hostname/text()'
xpath_nodes_without_slivers_in_network = '//network[@name="%s"]//node[not(sliver)]/hostname/text()'
if network:
defaults = self.xml.xpath("//network[@name='%s']/sliver_defaults" % network)
else:
- defaults = self.xml.xpath("//network/sliver_defaults" % network)
+ defaults = self.xml.xpath("//sliver_defaults")
+ if isinstance(defaults, list) and defaults:
+ defaults = defaults[0]
return self.attributes_list(defaults)
def get_sliver_attributes(self, hostname, network=None):
sliver = node.find("sliver")
return self.attributes_list(sliver)
+ def get_slice_attributes(self, network=None):
+ slice_attributes = []
+ nodes_with_slivers = self.get_nodes_with_slivers(network)
+ for default_attribute in self.get_default_sliver_attributes(network):
+ attribute = {'name': str(default_attribute[0]), 'value': str(default_attribute[1]), 'node_id': None}
+ slice_attributes.append(attribute)
+ for node in nodes_with_slivers:
+ sliver_attributes = self.get_sliver_attributes(node, network)
+ for sliver_attribute in sliver_attributes:
+ attribute = {'name': str(sliver_attribute[0]), 'value': str(sliver_attribute[1]), 'node_id': node}
+ slice_attributes.append(attribute)
+ return slice_attributes
+
def get_site_nodes(self, siteid, network=None):
if network:
nodes = self.xml.xpath('//network[@name="%s"]/site[@id="%s"]/node/hostname/text()' % \
for tag in node['tags']:
# expose this hard wired list of tags, plus the ones that are marked 'sfa' in their category
if tag['tagname'] in ['fcdistro', 'arch'] or 'sfa' in tag['category'].split('/'):
- tag_element = etree.SubElement(node_tag, tag['tagname'], value=tag['value'])
+ tag_element = etree.SubElement(node_tag, tag['tagname']).text=tag['value']
if 'site' in node:
longitude = str(node['site']['longitude'])
pass
def add_slivers(self, slivers, network=None, sliver_urn=None, no_dupes=False):
- slivers = self.__process_slivers(slivers)
+ slivers = self._process_slivers(slivers)
nodes_with_slivers = self.get_nodes_with_slivers(network)
for sliver in slivers:
if sliver['hostname'] in nodes_with_slivers:
sliver_elem = etree.SubElement(node_elem, 'sliver')
if 'tags' in sliver:
for tag in sliver['tags']:
- etree.SubElement(sliver_elem, tag['tagname'], value=tag['value'])
+ etree.SubElement(sliver_elem, tag['tagname']).text = value=tag['value']
def remove_slivers(self, slivers, network=None, no_dupes=False):
- if not isinstance(slivers, list):
- slivers = [slivers]
+ slivers = self._process_slivers(slivers)
for sliver in slivers:
node_elem = self.get_node_element(sliver['hostname'], network)
- sliver_elem = node.find('sliver')
+ sliver_elem = node_elem.find('sliver')
if sliver_elem != None:
- node_elem.remove(sliver)
+ node_elem.remove(sliver_elem)
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)
+ if not defaults :
+ network_tag = self.xml.xpath("//network[@name='%s']" % network)
+ if isinstance(network_tag, list):
+ network_tag = network_tag[0]
+ defaults = self.add_element('sliver_defaults', attrs={}, parent=network_tag)
+ elif isinstance(defaults, list):
+ defaults = defaults[0]
self.add_attribute(defaults, name, value)
def add_sliver_attribute(self, hostname, name, value, network=None):