make uniform Lease management methods in nitos
[sfa.git] / sfa / nitos / nitosaggregate.py
index e37624f..51c59d9 100644 (file)
@@ -19,7 +19,7 @@ from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.elements.channel import Channel
 from sfa.rspecs.version_manager import VersionManager
 
-from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn
+from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn, channel_to_urn
 from sfa.planetlab.vlink import get_tc_rate
 from sfa.planetlab.topology import Topology
 
@@ -127,7 +127,7 @@ class NitosAggregate:
             rspec_nodes.append(rspec_node)
         return rspec_nodes 
 
-    def get_leases_and_channels(self, slice=None, options={}):
+    def get_leases_and_channels(self, slice=None, slice_xrn=None,  options={}):
         
         slices = self.driver.shell.getSlices({}, [])
         nodes = self.driver.shell.getNodes({}, [])
@@ -136,6 +136,9 @@ class NitosAggregate:
         reserved_channels = self.driver.shell.getReservedChannels()
         grain = self.driver.testbedInfo['grain']
 
+        if slice_xrn and not slice:
+            return ([], [])
+
         if slice:
             all_leases = []
             all_leases.extend(leases)
@@ -161,6 +164,7 @@ class NitosAggregate:
             rspec_channel['channel_num'] = channel_number
             rspec_channel['start_time'] = channel['start_time']
             rspec_channel['duration'] = (int(channel['end_time']) - int(channel['start_time'])) / int(grain)
+            rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel_number)
                  
             # retreive slicename
             for slc in slices:
@@ -168,8 +172,13 @@ class NitosAggregate:
                      slicename = slc['slice_name']
                      break
 
-            slice_hrn = slicename_to_hrn(self.driver.hrn, self.driver.testbedInfo['name'], slicename)
-            slice_urn = hrn_to_urn(slice_hrn, 'slice')
+            if slice_xrn:
+                slice_urn = slice_xrn
+                slice_hrn = urn_to_hrn(slice_urn)
+            else:
+                slice_hrn = slicename_to_hrn(self.driver.hrn, self.driver.testbedInfo['name'], slicename)
+                slice_urn = hrn_to_urn(slice_hrn, 'slice')
+
             rspec_channel['slice_id'] = slice_urn
             rspec_channels.append(rspec_channel)
 
@@ -193,8 +202,13 @@ class NitosAggregate:
                      slicename = slc['slice_name']
                      break
             
-            slice_hrn = slicename_to_hrn(self.driver.hrn, self.driver.testbedInfo['name'], slicename)
-            slice_urn = hrn_to_urn(slice_hrn, 'slice')
+            if slice_xrn:
+                slice_urn = slice_xrn
+                slice_hrn = urn_to_hrn(slice_urn)
+            else:
+                slice_hrn = slicename_to_hrn(self.driver.hrn, self.driver.testbedInfo['name'], slicename)
+                slice_urn = hrn_to_urn(slice_hrn, 'slice')
+
             rspec_lease['slice_id'] = slice_urn
             rspec_lease['start_time'] = lease['start_time']
             rspec_lease['duration'] = (int(lease['end_time']) - int(lease['start_time'])) / int(grain)
@@ -226,6 +240,7 @@ class NitosAggregate:
             rspec_channel['channel_num'] = channel['channel']
             rspec_channel['frequency'] = channel['frequency']
             rspec_channel['standard'] = channel['modulation']
+            rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel['channel'])
             rspec_channels.append(rspec_channel)
         return rspec_channels
 
@@ -263,8 +278,8 @@ class NitosAggregate:
            rspec.version.add_channels(channels)
 
         if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'resources':
-           leases, channels = self.get_leases_and_channels(slice)
-           rspec.version.add_leases(leaseschannels)
+           leases_channels = self.get_leases_and_channels(slice, slice_xrn)
+           rspec.version.add_leases(leases_channels)
 
         return rspec.toxml()