slice_hrn, _ = urn_to_hrn(slice_xrn)
slice_name = slice_hrn
- slices = self.driver.iotlab_api.GetSlices(slice_filter=str(slice_name),
+ # GetSlices always returns a list, even if there is only one element
+ slices = self.driver.testbed_shell.GetSlices(slice_filter=str(slice_name),
slice_filter_type='slice_hrn',
login=login)
logger.debug("IotlabAggregate api \tget_slice_and_slivers \
- sfa_slice %s \r\n slices %s self.driver.hrn %s"
- % (sfa_slice, slices, self.driver.hrn))
+ slice_hrn %s \r\n slices %s self.driver.hrn %s"
+ % (slice_hrn, slices, self.driver.hrn))
if slices == []:
return (sfa_slice, slivers)
# sort slivers by node id , if there is a job
#and therefore, node allocated to this slice
- for sfa_slice in slices:
- try:
- node_ids_list = sfa_slice['node_ids']
- except KeyError:
- logger.log_exc("IOTLABAGGREGATE \t \
- get_slice_and_slivers No nodes in the slice \
- - KeyError ")
- continue
-
- for node in node_ids_list:
- sliver_xrn = Xrn(slice_urn, type='sliver', id=node)
- sliver_xrn.set_authority(self.driver.hrn)
- sliver = Sliver({'sliver_id': sliver_xrn.urn,
- 'name': sfa_slice['hrn'],
- 'type': 'iotlab-node',
- 'tags': []})
-
- slivers[node] = sliver
+ # for sfa_slice in slices:
+ sfa_slice = slices[0]
+ try:
+ node_ids_list = sfa_slice['node_ids']
+ except KeyError:
+ logger.log_exc("IOTLABAGGREGATE \t \
+ get_slice_and_slivers No nodes in the slice \
+ - KeyError ")
+ node_ids_list = []
+ # continue
+
+ for node in node_ids_list:
+ sliver_xrn = Xrn(slice_urn, type='sliver', id=node)
+ sliver_xrn.set_authority(self.driver.hrn)
+ sliver = Sliver({'sliver_id': sliver_xrn.urn,
+ 'name': sfa_slice['hrn'],
+ 'type': 'iotlab-node',
+ 'tags': []})
+
+ slivers[node] = sliver
#Add default sliver attribute :
#connection information for iotlab
- if get_authority(sfa_slice['hrn']) == self.driver.iotlab_api.root_auth:
- tmp = sfa_slice['hrn'].split('.')
- ldap_username = tmp[1].split('_')[0]
+ # if get_authority(sfa_slice['hrn']) == self.driver.testbed_shell.root_auth:
+ # tmp = sfa_slice['hrn'].split('.')
+ # ldap_username = tmp[1].split('_')[0]
+ # ssh_access = None
+ # slivers['default_sliver'] = {'ssh': ssh_access,
+ # 'login': ldap_username}
+ # look in ldap:
+ ldap_username = self.find_ldap_username_from_slice(sfa_slice)
+
+ if ldap_username is not None:
ssh_access = None
slivers['default_sliver'] = {'ssh': ssh_access,
- 'login': ldap_username}
+ 'login': ldap_username}
- #TODO get_slice_and_slivers Find the login of the external user
logger.debug("IOTLABAGGREGATE api get_slice_and_slivers slivers %s "
% (slivers))
return (slices, slivers)
+ def find_ldap_username_from_slice(self, sfa_slice):
+ researchers = [sfa_slice['reg_researchers'][0].__dict__]
+ # look in ldap:
+ ldap_username = None
+ ret = self.driver.testbed_shell.GetPersons(researchers)
+ if len(ret) != 0:
+ ldap_username = ret[0]['uid']
+
+ return ldap_username
+
def get_nodes(self, slices=None, slivers=[], options=None):
"""Returns the nodes in the slice using the rspec format, with all the
return []
# get the granularity in second for the reservation system
- grain = self.driver.iotlab_api.GetLeaseGranularity()
+ grain = self.driver.testbed_shell.GetLeaseGranularity()
- nodes = self.driver.iotlab_api.GetNodes()
+ nodes = self.driver.testbed_shell.GetNodes()
nodes_dict = {}
logger.debug("IOTLABAGGREGATE api get_nodes slices %s "
% (slices))
- reserved_nodes = self.driver.iotlab_api.GetNodesCurrentlyInUse()
+ reserved_nodes = self.driver.testbed_shell.GetNodesCurrentlyInUse()
logger.debug("IOTLABAGGREGATE api get_nodes slice_nodes_list %s "
% (slice_nodes_list))
for node in nodes:
rspec_node['archi'] = node['archi']
rspec_node['radio'] = node['radio']
- iotlab_xrn = iotlab_xrn_object(self.driver.iotlab_api.root_auth,
+ iotlab_xrn = iotlab_xrn_object(self.driver.testbed_shell.root_auth,
node['hostname'])
rspec_node['component_id'] = iotlab_xrn.urn
rspec_node['component_name'] = node['hostname']
rspec_node['component_manager_id'] = \
- hrn_to_urn(self.driver.iotlab_api.root_auth,
+ hrn_to_urn(self.driver.testbed_shell.root_auth,
'authority+sa')
# Iotlab's nodes are federated : there is only one authority
return (rspec_nodes)
- def get_all_leases(self):
+ def get_all_leases(self, ldap_username):
"""
Get list of lease dictionaries which all have the mandatory keys
('lease_id', 'hostname', 'site_id', 'name', 'start_time', 'duration').
All the leases running or scheduled are returned.
+ :param ldap_username: if ldap uid is not None, looks for the leases
+ belonging to this user.
+ :type ldap_username: string
:returns: rspec lease dictionary with keys lease_id, component_id,
slice_id, start_time, duration.
:rtype: dict
#if slice_record:
#lease_filter.update({'name': slice_record['name']})
- #leases = self.driver.iotlab_api.GetLeases(lease_filter)
- leases = self.driver.iotlab_api.GetLeases()
- grain = self.driver.iotlab_api.GetLeaseGranularity()
+ #leases = self.driver.testbed_shell.GetLeases(lease_filter)
+
+ logger.debug("IOTLABAGGREGATE get_all_leases ldap_username %s "
+ % (ldap_username))
+ leases = self.driver.testbed_shell.GetLeases(login=ldap_username)
+ grain = self.driver.testbed_shell.GetLeaseGranularity()
# site_ids = []
rspec_leases = []
for lease in leases:
rspec_lease = Lease()
rspec_lease['lease_id'] = lease['lease_id']
#site = node['site_id']
- iotlab_xrn = iotlab_xrn_object(self.driver.iotlab_api.root_auth,
+ iotlab_xrn = iotlab_xrn_object(self.driver.testbed_shell.root_auth,
node)
rspec_lease['component_id'] = iotlab_xrn.urn
#rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn,\
try:
rspec_lease['slice_id'] = lease['slice_id']
except KeyError:
- #No info on the slice used in iotlab_xp table
+ #No info on the slice used in testbed_xp table
pass
rspec_lease['start_time'] = lease['t_from']
rspec_lease['duration'] = (lease['t_until'] - lease['t_from']) \
- / grain
+ / grain
rspec_leases.append(rspec_lease)
return rspec_leases
def get_rspec(self, slice_xrn=None, login=None, version=None,
options=None):
"""
-
Returns xml rspec:
- - a full advertisement rspec with the testbed resources if slice_xrn
- is not specified.If a lease option is given, also returns the
- leases scheduled on the testbed.
- - a manifest Rspec with the leases and nodes in slice's leases
- if slice_xrn is not None.
+ - a full advertisement rspec with the testbed resources if slice_xrn is
+ not specified.If a lease option is given, also returns the leases
+ scheduled on the testbed.
+ - a manifest Rspec with the leases and nodes in slice's leases if
+ slice_xrn is not None.
:param slice_xrn: srn of the slice
+ :type slice_xrn: string
:param login: user'uid (ldap login) on iotlab
+ :type login: string
:param version: can be set to sfa or iotlab
+ :type version: RSpecVersion
:param options: used to specify if the leases should also be included in
the returned rspec.
- :type slice_xrn: string
- :type login: string
- :type version: RSpecVersion
:type options: dict
:returns: Xml Rspec.
"""
+ ldap_username = None
rspec = None
version_manager = VersionManager()
version = version_manager.get_version(version)
version.type, version.version, 'manifest')
slices, slivers = self.get_slice_and_slivers(slice_xrn, login)
+ if slice_xrn and slices is not None:
+ #Get user associated with this slice
+ #for one_slice in slices :
+ ldap_username = self.find_ldap_username_from_slice(slices[0])
+ # ldap_username = slices[0]['reg_researchers'][0].__dict__['hrn']
+ # # ldap_username = slices[0]['user']
+ # tmp = ldap_username.split('.')
+ # ldap_username = tmp[1]
+ logger.debug("IotlabAggregate \tget_rspec **** \
+ LDAP USERNAME %s \r\n" \
+ % (ldap_username))
#at this point sliver may be empty if no iotlab job
#is running for this user/slice.
rspec = RSpec(version=rspec_version, user_options=options)
#if not options.get('list_leases') or options.get('list_leases')
#and options['list_leases'] != 'leases':
nodes = self.get_nodes(slices, slivers)
+ if slice_xrn and slices is None:
+ nodes = []
logger.debug("\r\n")
logger.debug("IotlabAggregate \t lease_option %s \
get rspec ******* nodes %s"
#In case creating a job, slice_xrn is not set to None
rspec.version.add_nodes(nodes)
if slice_xrn and slices is not None:
- #Get user associated with this slice
- #for one_slice in slices :
- ldap_username = slices[0]['hrn']
- tmp = ldap_username.split('.')
- ldap_username = tmp[1].split('_')[0]
+ # #Get user associated with this slice
+ # #for one_slice in slices :
+ # ldap_username = slices[0]['reg_researchers']
+ # # ldap_username = slices[0]['user']
+ # tmp = ldap_username.split('.')
+ # ldap_username = tmp[1]
+ # # ldap_username = tmp[1].split('_')[0]
+
logger.debug("IotlabAggregate \tget_rspec **** \
- version type %s \r\n" % (version.type))
+ version type %s ldap_ user %s \r\n" \
+ % (version.type, ldap_username))
if version.type == "Iotlab":
rspec.version.add_connection_information(
ldap_username, sites_set)
attrib, default_sliver[attrib])
if lease_option in ['all','leases']:
- leases = self.get_all_leases()
+ leases = self.get_all_leases(ldap_username)
rspec.version.add_leases(leases)
logger.debug("IotlabAggregate \tget_rspec **** \
FINAL RSPEC %s \r\n" % (rspec.toxml()))