Merge branch 'geni-v3' of ssh://git.onelab.eu/git/sfa into geni-v3
[sfa.git] / sfa / rspecs / versions / pgv2.py
index 9ac4d37..21183bf 100644 (file)
@@ -1,10 +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.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'
@@ -44,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
@@ -102,7 +103,8 @@ class PGv2(RSpecVersion):
     def add_default_sliver_attribute(self, name, value, network=None):
         pass
 
     def add_default_sliver_attribute(self, name, value, network=None):
         pass
 
-    def add_slivers(self, hostnames, attributes=[], sliver_urn=None, append=False):
+    def add_slivers(self, hostnames, attributes=None, sliver_urn=None, append=False):
+        if attributes is None: attributes=[]
         # all nodes hould already be present in the rspec. Remove all
         # nodes that done have slivers
         for hostname in hostnames:
         # all nodes hould already be present in the rspec. Remove all
         # nodes that done have slivers
         for hostname in hostnames:
@@ -143,7 +145,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    
@@ -173,6 +175,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):
@@ -186,13 +204,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():