- node_tag = etree.SubElement(self.xml, 'node', exclusive='false')
- if 'network_urn' in node:
- node_tag.set('component_manager_id', node['network_urn'])
- if 'urn' in node:
- node_tag.set('component_id', node['urn'])
- if 'hostname' in node:
- node_tag.set('component_name', node['hostname'])
- # TODO: should replace plab-pc with pc model
- node_type_tag = etree.SubElement(node_tag, 'hardware_type', name='plab-pc')
- node_type_tag = etree.SubElement(node_tag, 'hardware_type', name='pc')
- available_tag = etree.SubElement(node_tag, 'available', now='true')
- sliver_type_tag = etree.SubElement(node_tag, 'sliver_type', name='plab-vnode')
-
- pl_initscripts = node.get('pl_initscripts', {})
- for pl_initscript in pl_initscripts.values():
- etree.SubElement(sliver_type_tag, '{%s}initscript' % self.namespaces['planetlab'], name=pl_initscript['name'])
-
- # protogeni uses the <sliver_type> tag to identify the types of
- # vms available at the node.
- # only add location tag if longitude and latitude are not null
- if 'site' in node:
- longitude = node['site'].get('longitude', None)
- latitude = node['site'].get('latitude', None)
- if longitude and latitude:
- location_tag = etree.SubElement(node_tag, 'location', country="us", \
- longitude=str(longitude), latitude=str(latitude))
+ # remove available element
+ for available_elem in node_elem.xpath('./default:available | ./available'):
+ node_elem.remove(available_elem)
+
+ # remove interface elements
+ for interface_elem in node_elem.xpath('./default:interface | ./interface'):
+ node_elem.remove(interface_elem)
+
+ # remove existing sliver_type elements
+ for sliver_type in node_elem.get('slivers', []):
+ node_elem.element.remove(sliver_type.element)