PL Driver: 1st shot rebase of PL operations around the HRN tags of Slice/Person/Site
[sfa.git] / sfa / planetlab / plaggregate.py
index a16bf67..4401275 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/python
-from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn
+from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn, get_authority, get_leaf
 from sfa.util.sfatime import utcparse, datetime_to_string
 from sfa.util.sfalogging import logger
 
@@ -17,7 +17,7 @@ from sfa.rspecs.elements.lease import Lease
 from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.version_manager import VersionManager
 
-from sfa.planetlab.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename, slicename_to_hrn
+from sfa.planetlab.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename, slicename_to_hrn, top_auth, hash_loginbase
 from sfa.planetlab.vlink import get_tc_rate
 from sfa.planetlab.topology import Topology
 
@@ -108,9 +108,20 @@ class PlAggregate:
         slice = None
         if not slice_xrn:
             return (slice, slivers)
+
         slice_urn = hrn_to_urn(slice_xrn, 'slice')
         slice_hrn, _ = urn_to_hrn(slice_xrn)
-        slice_name = hrn_to_pl_slicename(slice_hrn)
+
+        top_auth_hrn = top_auth(slice_hrn)
+        site_hrn = '.'.join(slice_hrn.split('.')[:-1])
+        slice_part = slice_hrn.split('.')[-1]
+        if top_auth_hrn == self.driver.hrn:
+            login_base = slice_hrn.split('.')[-2][:12]
+        else:
+            login_base = hash_loginbase(site_hrn)
+
+        slice_name = '_'.join([login_base, slice_part])
+
         slices = self.driver.shell.GetSlices(slice_name)
         if not slices:
             return (slice, slivers)
@@ -238,7 +249,8 @@ class PlAggregate:
                 rspec_node['interfaces'].append(interface)
                 if_count+=1
 
-            tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']]
+            tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']\
+                    if tag_id in node_tags]
             rspec_node['tags'] = tags
             if node['node_id'] in slivers:
                 # add sliver info
@@ -288,12 +300,16 @@ class PlAggregate:
             site=sites_dict[site_id]
 
             #rspec_lease['lease_id'] = lease['lease_id']
-            rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, site['login_base'], lease['hostname'])
+            rspec_lease['component_id'] = hrn_to_urn(self.driver.shell.GetNodeHrn(lease['hostname']), 'node')
+            #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, site['login_base'], lease['hostname'])
             if slice_xrn:
                 slice_urn = slice_xrn
-                slice_hrn = urn_to_hrn(slice_urn)
+                slice_hrn, _ = urn_to_hrn(slice_urn)
+                # Check slice HRN
+                if slice_hrn != self.driver.shell.GetSliceHrn(lease['slice_id']):
+                    self.driver.shell.SetSliceHrn(lease['slice_id'], slice_hrn)
             else:
-                slice_hrn = slicename_to_hrn(self.driver.hrn, lease['name'])
+                slice_hrn = self.driver.shell.GetSliceHrn(lease['slice_id'])
                 slice_urn = hrn_to_urn(slice_hrn, 'slice')
             rspec_lease['slice_id'] = slice_urn
             rspec_lease['start_time'] = lease['t_from']
@@ -328,8 +344,8 @@ class PlAggregate:
             if default_sliver:
                 default_sliver_attribs = default_sliver.get('tags', [])
                 for attrib in default_sliver_attribs:
-                    logger.info(attrib)
-                    rspec.version.add_default_sliver_attribute(attrib['tagname'], attrib['value'])
+                    logger.info("adding default sliver attribute xrn=%s attrib=%s"%(slice_xrn,attrib))
+                    rspec.version.add_default_sliver_attribute(attrib['tagname'], attrib['value'], self.driver.hrn)
         
         if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'resources':
            leases = self.get_leases(slice_xrn, slice)