All versions of rspecs need to support "links" and "channels" management methods
[sfa.git] / sfa / rspecs / versions / pgv2.py
index 3565d4e..80febc9 100644 (file)
@@ -1,11 +1,11 @@
 from copy import deepcopy
 from StringIO import StringIO
 from copy import deepcopy
 from StringIO import StringIO
-from sfa.util.xrn import Xrn, urn_to_sliver_id
-from sfa.util.plxrn import hostname_to_urn, xrn_to_hostname 
+from sfa.util.xrn import Xrn
 from sfa.rspecs.version import RSpecVersion
 from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
 from sfa.rspecs.elements.versions.pgv2Node import PGv2Node
 from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
 from sfa.rspecs.version import RSpecVersion
 from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
 from sfa.rspecs.elements.versions.pgv2Node import PGv2Node
 from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
+from sfa.rspecs.elements.versions.pgv2Lease import PGv2Lease
  
 class PGv2(RSpecVersion):
     type = 'ProtoGENI'
  
 class PGv2(RSpecVersion):
     type = 'ProtoGENI'
@@ -45,8 +45,8 @@ class PGv2(RSpecVersion):
     def get_nodes_with_slivers(self):
         return PGv2Node.get_nodes_with_slivers(self.xml)
 
     def get_nodes_with_slivers(self):
         return PGv2Node.get_nodes_with_slivers(self.xml)
 
-    def add_nodes(self, nodes, check_for_dupes=False):
-        return PGv2Node.add_nodes(self.xml, nodes)
+    def add_nodes(self, nodes, check_for_dupes=False, rspec_content_type=None):
+        return PGv2Node.add_nodes(self.xml, nodes, rspec_content_type)
     
     def merge_node(self, source_node_tag):
         # this is untested
     
     def merge_node(self, source_node_tag):
         # this is untested
@@ -144,7 +144,7 @@ class PGv2(RSpecVersion):
                 # set the sliver id
                 #slice_id = sliver_info.get('slice_id', -1)
                 #node_id = sliver_info.get('node_id', -1)
                 # set the sliver id
                 #slice_id = sliver_info.get('slice_id', -1)
                 #node_id = sliver_info.get('node_id', -1)
-                #sliver_id = urn_to_sliver_id(sliver_urn, slice_id, node_id)
+                #sliver_id = Xrn(xrn=sliver_urn, type='slice', id=str(node_id)).get_urn()
                 #node_elem.set('sliver_id', sliver_id)
 
             # add the sliver type elemnt    
                 #node_elem.set('sliver_id', sliver_id)
 
             # add the sliver type elemnt    
@@ -174,6 +174,22 @@ class PGv2(RSpecVersion):
     def add_link_requests(self, link_tuples, append=False):
         PGv2Link.add_link_requests(self.xml.root, link_tuples, append)
 
     def add_link_requests(self, link_tuples, append=False):
         PGv2Link.add_link_requests(self.xml.root, link_tuples, append)
 
+    # Leases
+
+    def get_leases(self, filter=None):
+        return PGv2Lease.get_leases(self.xml, filter)
+
+    def add_leases(self, leases, network = None, no_dupes=False):
+        PGv2Lease.add_leases(self.xml, leases)
+
+    # Spectrum
+
+    def get_channels(self, filter=None):
+        return []
+
+    def add_channels(self, channels, network = None, no_dupes=False):
+        pass
+
     # Utility
 
     def merge(self, in_rspec):
     # Utility
 
     def merge(self, in_rspec):
@@ -187,13 +203,20 @@ class PGv2(RSpecVersion):
 
         nodes = in_rspec.version.get_nodes()
         # protogeni rspecs need to advertise the availabel sliver types
 
         nodes = in_rspec.version.get_nodes()
         # protogeni rspecs need to advertise the availabel sliver types
+        main_nodes = []
         for node in nodes:
         for node in nodes:
+            if not node['component_name']:
+                # this node element is part of a lease
+                continue
             if not node.has_key('sliver') or not node['sliver']:
                 node['sliver'] = {'name': 'plab-vserver'}
             if not node.has_key('sliver') or not node['sliver']:
                 node['sliver'] = {'name': 'plab-vserver'}
-            
-        self.add_nodes(nodes)
+                main_nodes.append(node)
+        self.add_nodes(main_nodes)
         self.add_links(in_rspec.version.get_links())
         
         self.add_links(in_rspec.version.get_links())
         
+        # Leases
+        leases = in_rspec.version.get_leases()
+        self.add_leases(leases)
         #
         #rspec = RSpec(in_rspec)
         #for child in rspec.xml.iterchildren():
         #
         #rspec = RSpec(in_rspec)
         #for child in rspec.xml.iterchildren():