X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplanetlab%2Fplaggregate.py;h=47c637bc5573dc84c2b127aaf771fb747c96ee36;hb=f357d5c677573e29f260f82318c9450119474dce;hp=46154e6fb86b9304ffab98eefd4c48b8c6e9fd9b;hpb=3d9943d1e5f993408b618cde29ff31b3585e5cef;p=sfa.git diff --git a/sfa/planetlab/plaggregate.py b/sfa/planetlab/plaggregate.py index 46154e6f..47c637bc 100644 --- a/sfa/planetlab/plaggregate.py +++ b/sfa/planetlab/plaggregate.py @@ -1,5 +1,5 @@ #!/usr/bin/python -from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn, urn_to_sliver_id +from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn from sfa.util.sfatime import utcparse, datetime_to_string from sfa.util.sfalogging import logger @@ -118,7 +118,9 @@ class PlAggregate: # sort slivers by node id for node_id in slice['node_ids']: - sliver = Sliver({'sliver_id': urn_to_sliver_id(slice_urn, slice['slice_id'], node_id, authority=self.driver.hrn), + sliver_xrn = Xrn(slice_urn, type='sliver', id=node_id) + sliver_xrn.set_authority(self.driver.hrn) + sliver = Sliver({'sliver_id': sliver_xrn.urn, 'name': slice['name'], 'type': 'plab-vserver', 'tags': []}) @@ -129,7 +131,9 @@ class PlAggregate: for tag in tags: # most likely a default/global sliver attribute (node_id == None) if tag['node_id'] not in slivers: - sliver = Sliver({'sliver_id': urn_to_sliver_id(slice_urn, slice['slice_id'], ""), + sliver_xrn = Xrn(slice_urn, type='sliver', id=tag['node_id']) + sliver_xrn.set_authority(self.driver.hrn) + sliver = Sliver({'sliver_id': sliver_xrn.urn, 'name': slice['name'], 'type': 'plab-vserver', 'tags': []}) @@ -199,7 +203,13 @@ class PlAggregate: # do not include boot state ( element) in the manifest rspec if not slice: rspec_node['boot_state'] = node['boot_state'] - rspec_node['exclusive'] = 'false' + + #add the exclusive tag to distinguish between Shared and Reservable nodes + if node['node_type'] == 'reservable': + rspec_node['exclusive'] = 'true' + else: + rspec_node['exclusive'] = 'false' + rspec_node['hardware_types'] = [HardwareType({'name': 'plab-pc'}), HardwareType({'name': 'pc'})] # only doing this because protogeni rspec needs @@ -228,14 +238,17 @@ 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 sliver = slivers[node['node_id']] rspec_node['sliver_id'] = sliver['sliver_id'] - rspec_node['client_id'] = node['hostname'] rspec_node['slivers'] = [sliver] + for tag in sliver['tags']: + if tag['tagname'] == 'client_id': + rspec_node['client_id'] = tag['value'] # slivers always provide the ssh service login = Login({'authentication': 'ssh-keys', 'hostname': node['hostname'], 'port':'22', 'username': sliver['name']}) @@ -245,8 +258,11 @@ class PlAggregate: return (rspec_nodes, links) - def get_leases(self, slice=None, options={}): + def get_leases(self, slice_xrn=None, slice=None, options={}): + if slice_xrn and not slice: + return [] + now = int(time.time()) filter={} filter.update({'clip':now}) @@ -272,10 +288,14 @@ class PlAggregate: site_id=lease['site_id'] site=sites_dict[site_id] - rspec_lease['lease_id'] = lease['lease_id'] + #rspec_lease['lease_id'] = lease['lease_id'] rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, site['login_base'], lease['hostname']) - slice_hrn = slicename_to_hrn(self.driver.hrn, lease['name']) - 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, lease['name']) + slice_urn = hrn_to_urn(slice_hrn, 'slice') rspec_lease['slice_id'] = slice_urn rspec_lease['start_time'] = lease['t_from'] rspec_lease['duration'] = (lease['t_until'] - lease['t_from']) / grain @@ -298,19 +318,22 @@ class PlAggregate: rspec.xml.set('expires', datetime_to_string(utcparse(slice['expires']))) if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'leases': - nodes, links = self.get_nodes_and_links(slice_xrn, slice, slivers, options) - rspec.version.add_nodes(nodes) - rspec.version.add_links(links) - # add sliver defaults - default_sliver = slivers.get(None, []) - 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']) + if slice_xrn and not slivers: + nodes, links = [], [] + else: + nodes, links = self.get_nodes_and_links(slice_xrn, slice, slivers, options) + rspec.version.add_nodes(nodes) + rspec.version.add_links(links) + # add sliver defaults + default_sliver = slivers.get(None, []) + 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']) if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'resources': - leases = self.get_leases(slice) + leases = self.get_leases(slice_xrn, slice) rspec.version.add_leases(leases) return rspec.toxml()