Merge branch 'upstreammaster'
[sfa.git] / sfa / rspecs / versions / pgv2.py
index fba1a26..186e101 100644 (file)
@@ -19,16 +19,22 @@ class PGv2(BaseVersion):
     }
     namespaces = dict(extensions.items() + [('default', namespace)])
 
-    # Networks    
+    # Networks
     def get_networks(self):
-        networks = set()
-        nodes = self.xml.xpath('//default:node[@component_manager_id] | //node:[@component_manager_id]', namespaces=self.namespaces)
-        for node in nodes: 
-            if 'component_manager_id' in node:
-                network_urn  = node.get('component_manager_id')
-                network_hrn = Xrn(network_urn).get_hrn()[0]
-                networks.add({'name': network_hrn})
-        return list(networks)
+        network_names = set()
+        nodes = self.xml.xpath('//default:node[@component_manager_id] | //node[@component_manager_id]', namespaces=self.namespaces)
+        for node in nodes:
+            if 'component_manager_id' in node.attrib:
+                network_urn = node.get('component_manager_id')
+                if network_urn.startswith("urn:"):
+                    network_hrn = Xrn(network_urn).get_hrn()
+                else:
+                    # some component_manager_ids are hrns instead of urns??
+                    network_hrn = network_urn
+                network_names.add(network_hrn)
+        network_names = list(network_names)
+        networks = [{"name": x} for x in network_names]
+        return networks
 
     # Nodes
 
@@ -114,10 +120,18 @@ class PGv2(BaseVersion):
             
             if not requested_sliver_type:
                 continue
-            sliver = {'name': requested_sliver_type,
+            sliver = {'type': requested_sliver_type,
                      'pl_tags': attributes}
 
-            # remove existing sliver_type tags
+            # 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)