From: Tony Mack Date: Thu, 24 Jan 2013 02:12:03 +0000 (-0500) Subject: send geni_users list to Provision call, not Allocate X-Git-Tag: sfa-3.0-0~12 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=01160b187b31e1382e047c5027492bc311b6f6cd;p=sfa.git send geni_users list to Provision call, not Allocate --- diff --git a/sfa/client/sfi.py b/sfa/client/sfi.py index 5d15c361..57cb37ee 100644 --- a/sfa/client/sfi.py +++ b/sfa/client/sfi.py @@ -1225,23 +1225,8 @@ or with an slice hrn, shows currently provisioned resources # rspec rspec_file = self.get_rspec_file(args[1]) rspec = open(rspec_file).read() - # users - # need to pass along user keys to the aggregate. - # users = [ - # { urn: urn:publicid:IDN+emulab.net+user+alice - # keys: [, ] - # }] - users = [] - slice_records = self.registry().Resolve(slice_urn, [self.my_credential_string]) - if slice_records and 'researcher' in slice_records[0] and slice_records[0]['researcher']!=[]: - slice_record = slice_records[0] - user_hrns = slice_record['researcher'] - user_urns = [hrn_to_urn(hrn, 'user') for hrn in user_hrns] - user_records = self.registry().Resolve(user_urns, [self.my_credential_string]) - api_options = {} api_options ['call_id'] = unique_call_id() - api_options['geni_users'] = users result = server.Allocate(slice_urn, creds, rspec, api_options) value = ReturnValue.get_value(result) if self.options.raw: @@ -1281,7 +1266,24 @@ or with an slice hrn, shows currently provisioned resources # set the requtested rspec version version_manager = VersionManager() rspec_version = version_manager._get_version('geni', '3.0').to_dict() - api_options['geni_rspec_version'] = rspec_version + api_options['geni_rspec_version'] = rspec_version + + # users + # need to pass along user keys to the aggregate. + # users = [ + # { urn: urn:publicid:IDN+emulab.net+user+alice + # keys: [, ] + # }] + users = [] + slice_records = self.registry().Resolve(slice_urn, [self.my_credential_string]) + if slice_records and 'researcher' in slice_records[0] and slice_records[0]['researcher']!=[]: + slice_record = slice_records[0] + user_hrns = slice_record['researcher'] + user_urns = [hrn_to_urn(hrn, 'user') for hrn in user_hrns] + user_records = self.registry().Resolve(user_urns, [self.my_credential_string]) + users = pg_users_arg(user_records) + + api_options['geni_users'] = users result = server.Provision([slice_urn], creds, api_options) value = ReturnValue.get_value(result) if self.options.raw: diff --git a/sfa/planetlab/plaggregate.py b/sfa/planetlab/plaggregate.py index 1095f8d1..dc8a8ac7 100644 --- a/sfa/planetlab/plaggregate.py +++ b/sfa/planetlab/plaggregate.py @@ -140,7 +140,8 @@ class PlAggregate: slices = self.driver.shell.GetSlices(filter) if not slices: return [] - slice = slices[0] + slice = slices[0] + slice['hrn'] = PlXrn(auth=self.driver.hrn, slicename=slice['name']).hrn # get sliver users persons = [] @@ -179,7 +180,7 @@ class PlAggregate: nodes_dict = self.get_slice_nodes(slice, options) slivers = [] for node in nodes_dict.values(): - node.update(slices[0]) + node.update(slice) node['tags'] = tags_dict[node['node_id']] sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn diff --git a/sfa/planetlab/pldriver.py b/sfa/planetlab/pldriver.py index ec6e973a..4977fe05 100644 --- a/sfa/planetlab/pldriver.py +++ b/sfa/planetlab/pldriver.py @@ -646,7 +646,7 @@ class PlDriver (Driver): # ensure slice record exists slice = slices.verify_slice(xrn.hrn, slice_record, peer, sfa_peer, expiration=expiration, options=options) # ensure person records exists - persons = slices.verify_persons(xrn.hrn, slice, users, peer, sfa_peer, options=options) + #persons = slices.verify_persons(xrn.hrn, slice, users, peer, sfa_peer, options=options) # ensure slice attributes exists slices.verify_slice_attributes(slice, requested_attributes, options=options) @@ -674,14 +674,22 @@ class PlDriver (Driver): leases = slices.verify_slice_leases(slice, requested_leases, kept_leases, peer) # handle MyPLC peer association. # only used by plc and ple. - slices.handle_peer(site, slice, persons, peer) + slices.handle_peer(site, slice, None, peer) return aggregate.describe([xrn.get_urn()], version=rspec.version) def provision(self, urns, options={}): - # update sliver allocation states and set them to geni_provisioned + # update users + slices = PlSlices(self) aggregate = PlAggregate(self) slivers = aggregate.get_slivers(urns) + slice = slivers[0] + peer = slices.get_peer(slice['hrn']) + sfa_peer = slices.get_sfa_peer(slice['hrn']) + users = options.get('geni_users', []) + persons = slices.verify_persons(None, slice, users, peer, sfa_peer, options=options) + slices.handle_peer(None, None, persons, peer) + # update sliver allocation states and set them to geni_provisioned sliver_ids = [sliver['sliver_id'] for sliver in slivers] SliverAllocation.set_allocations(sliver_ids, 'geni_provisioned') version_manager = VersionManager()