user, passwd = auth.get_user_credentials()
self.api = rest.Api(user, passwd)
-
def get_nodes(self):
"""
Get all OAR nodes
nodes = experiment.info_experiment(self.api)
except HTTPError as err:
logger.warning("iotlashell get_nodes error %s" % err.reason)
- return {'error' : err.reason}
+ return {'error': err.reason}
for node in nodes['items']:
nodes_dict[node['network_address']] = node
return nodes_dict
-
- def get_users(self):
+ def get_users(self, email=None):
"""
Get all LDAP users
:returns: users with LDAP attributes
logger.warning("iotlashell get_users")
users_dict = {}
try:
- users = self.api.method('admin/users')
+ if email:
+ users = self.api.method('admin/users?email=%s' % email)
+ else:
+ users = self.api.method('admin/users')
except HTTPError as err:
logger.warning("iotlashell get_users error %s" % err.reason)
- return {'error' : err.reason}
+ return {'error': err.reason}
for user in users:
users_dict[user['email']] = user
return users_dict
-
def reserve_nodes(self, login, exp_name,
nodes_list, start_time, duration):
"""
"""
# pylint:disable=W0212,R0913,E1123
logger.warning("iotlashell reserve_nodes")
+ logger.info("login=%s, exp_name=%s, nodes_list=%s, start_time=%s, duration=%s" % (login, exp_name, nodes_list, start_time, duration))
exp_file = helpers.FilesDict()
_experiment = experiment._Experiment(exp_name, duration, start_time)
_experiment.type = 'physical'
files=exp_file)
except HTTPError as err:
logger.warning("iotlashell reserve_nodes error %s" % err.reason)
- return {'error' : err.reason}
-
+ return {'error': err.reason}
def get_reserved_nodes(self):
"""
- Get all OAR jobs with state Waiting or Running.
+ Get all OAR jobs not terminated.
:Example:
{"total":"1907",
"""
logger.warning("iotlashell get_reserved_nodes")
reserved_nodes_dict = {}
- request = 'admin/experiments?state=Running,Waiting'
+ request = ('admin/experiments?state='
+ 'Running,Waiting,toAckReservation,'
+ 'toLaunch,Launching')
try:
experiments = self.api.method(request)
except HTTPError as err:
logger.warning("iotlashell get_reserved_nodes error %s" %
err.reason)
- return {'error' : err.reason}
+ return {'error': err.reason}
for exp in experiments['items']:
- # BUG IN OAR REST API : job with reservation didn't return
- # resources attribute list
- # we use another request for finding job resources
- exp_nodes = self.api.method('admin/experiments/%d' % exp['id'])
- exp['resources'] = exp_nodes['nodes']
+ # BUG ASAP jobs without date information
+ if exp['date'] == "as soon as possible":
+ exp['date'] = 0
reserved_nodes_dict[exp['id']] = exp
return reserved_nodes_dict
-
def add_user(self, slice_user):
"""
Add LDAP user
"""
# pylint:disable=E1123
logger.warning("iotlashell add_user")
- user = {"type" : "SA", # single account creation
- "city" : "To be defined",
- "country" : "To be defined",
- "motivations" : "SFA federation"}
+ logger.warning("slice_user: %s" % slice_user)
+ if 'urn' in slice_user:
+ organization = slice_user['urn']
+ else:
+ organization = "SFA federation"
+ # single account creation
+ user = {"type": "SA",
+ "city": "To be defined",
+ "country": "To be defined",
+ "motivations": "SFA federation",
+ "organization": organization}
email = slice_user['email']
user['email'] = email
user['sshPublicKey'] = slice_user['keys'][0]
# ex : onelab.inria
- user['structure'] = slice_user['slice_record']['authority']
+ user['structure'] = slice_user['urn'].split('+')[1].replace(':','.')
email = (email.split('@'))[0]
user['firstName'] = email.split('.')[0]
try:
user['lastName'] = email.split('.')[0]
try:
self.api.method('admin/users', 'post',
- json=user)
+ json=user)
except HTTPError as err:
logger.warning("iotlashell add_user error %s" % err.reason)
-
\ No newline at end of file