Merge branch 'master' into eucalyptus-devel
[sfa.git] / sfa / rspecs / pg_rspec.py
index 0f9b8e2..6ee30db 100755 (executable)
@@ -93,13 +93,20 @@ class PGRSpec(RSpec):
         return nodes
 
     def get_nodes_without_slivers(self, network=None):
-        pass
+        return []
    
     def get_slice_attributes(self, network=None):
-        pass
+        return []
+
+    def attributes_list(self, elem):
+        opts = []
+        if elem is not None:
+            for e in elem:
+                opts.append((e.tag, e.text))
+        return opts
 
     def get_default_sliver_attributes(self, network=None):
-        pass 
+        return []
 
     def add_default_sliver_attribute(self, name, value, network=None):
         pass
@@ -134,24 +141,27 @@ class PGRSpec(RSpec):
                 latitude = node['site'].get('latitude', None)
                 if longitude and latitude:
                     location_tag = etree.SubElement(node_tag, 'location', country="us", \
-                                                    longitude=longitude, latitude=latitude)
+                                                    longitude=str(longitude), latitude=str(latitude))
 
 
     def add_slivers(self, slivers, sliver_urn=None, no_dupes=False): 
+
+        # all nodes hould already be present in the rspec. Remove all 
+        # nodes that done have slivers
         slivers = self._process_slivers(slivers)
-        nodes_with_slivers = self.get_nodes_with_slivers()
-        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 nodes:
-                node = nodes[0]
+        sliver_hosts = [sliver['hostname'] for sliver in slivers]
+        nodes = self.get_node_elements()
+        for node in nodes:
+            urn = node.get('component_id')
+            hostname = xrn_to_hostname(urn)
+            if hostname not in sliver_hosts:
+                parent = node.getparent()
+                parent.remove(node)
+            else:
                 node.set('client_id', hostname)
                 if sliver_urn:
                     node.set('sliver_id', sliver_urn)
-                etree.SubElement(node, 'sliver_type', name='plab-vnode')
-
+     
     def add_default_sliver_attribute(self, name, value, network=None):
         pass
 
@@ -176,19 +186,6 @@ class PGRSpec(RSpec):
     def cleanup(self):
         # remove unncecessary elements, attributes
         if self.type in ['request', 'manifest']:
-            # remove nodes without slivers
-            nodes = self.get_node_elements()
-            for node in nodes:
-                delete = True
-                hostname = node.get('component_name')
-                parent = node.getparent()
-                children = node.getchildren()
-                for child in children:
-                    if child.tag.endswith('sliver_type'):
-                        delete = False
-                if delete:
-                    parent.remove(node)
-
             # remove 'available' element from remaining node elements
             self.remove_element('//rspecv2:available | //available')