import sys
import subprocess
-import datetime
-from time import gmtime, strftime
+
+from datetime import datetime
+from dateutil import tz
+from time import strftime,gmtime
from sfa.util.faults import MissingSfaInfo , SliverDoesNotExist
from sfa.util.sfalogging import logger
#res['slab_hostname'] = node['hostname']
#res['slab_boot_state'] = node['boot_state']
- res['pl_hostname'] = nodeall_byhostname[node['hostname']]['hostname']
- res['pl_boot_state'] = nodeall_byhostname[node['hostname']]['boot_state']
+ res['pl_hostname'] = nodeall_byhostname[node]['hostname']
+ res['pl_boot_state'] = nodeall_byhostname[node]['boot_state']
res['pl_last_contact'] = strftime(self.time_format, gmtime(float(timestamp)))
- sliver_id = urn_to_sliver_id(slice_urn, sl['record_id_slice'],nodeall_byhostname[node['hostname']]['node_id'] )
+ sliver_id = urn_to_sliver_id(slice_urn, sl['record_id_slice'],nodeall_byhostname[node]['node_id'] )
res['geni_urn'] = sliver_id
- if nodeall_byhostname[node['hostname']]['boot_state'] == 'Alive':
+ if nodeall_byhostname[node]['boot_state'] == 'Alive':
#if node['boot_state'] == 'Alive':
res['geni_status'] = 'ready'
else:
return return_person_list
def GetTimezone(self):
- time = self.oar.parser.SendRequest("GET_timezone")
- return time
+ server_timestamp,server_tz = self.oar.parser.SendRequest("GET_timezone")
+ return server_timestamp,server_tz
def DeleteJobs(self, job_id, username):
#'api_timestamp']
#assigned_res = ['resource_id', 'resource_uri']
#assigned_n = ['node', 'node_uri']
-
if job_id and resources is False:
req = "GET_jobs_id"
if job_id and resources :
req = "GET_jobs_id_resources"
node_list_k = 'reserved_resources'
-
-
#Get job info from OAR
job_info = self.oar.parser.SendRequest(req, job_id, username)
for node in node_list:
node_hostname_list.append(node['hostname'])
node_dict = dict(zip(node_hostname_list,node_list))
-
-
try :
-
-
liste =job_info[node_list_k]
print>>sys.stderr, "\r\n \r\n \t\t GetJobs resources job_info liste%s" %(liste)
for k in range(len(liste)):
except KeyError:
print>>sys.stderr, "\r\n \r\n \t\t GetJobs KEYERROR "
-
-
-
-
+ def GetReservedNodes(self):
+ # this function returns a list of all the nodes already involved in an oar job
+
+ jobs=self.oar.parser.SendRequest("GET_jobs_details")
+ nodes=[]
+ for j in jobs :
+ nodes=j['assigned_network_address']+nodes
+ return nodes
def GetNodes(self,node_filter= None, return_fields=None):
reqdict['type'] = "deploy"
reqdict['directory']= ""
reqdict['name']= "TestSandrine"
- timestamp = self.GetTimezone()
+ # reservations are performed in the oar server timebase, so :
+ # 1- we get the server time(in UTC tz )/server timezone
+ # 2- convert the server UTC time in its timezone
+ # 3- add a custom delay to this time
+ # 4- convert this time to a readable form and it for the reservation request.
+ server_timestamp,server_tz = self.GetTimezone()
+ s_tz=tz.gettz(server_tz)
+ UTC_zone = tz.gettz("UTC")
+ #weird... datetime.fromtimestamp should work since we do from datetime import datetime
+ utc_server= datetime.datetime.fromtimestamp(float(server_timestamp)+20,UTC_zone)
+ server_localtime=utc_server.astimezone(s_tz)
+
print>>sys.stderr, "\r\n \r\n AddSliceToNodes slice_name %s added_nodes %s username %s reqdict %s " %(slice_name,added_nodes,slice_user, reqdict)
- readable_time = strftime(self.time_format, gmtime(float(timestamp)))
- print >>sys.stderr," \r\n \r\n \t\t\t\t AVANT ParseTimezone readable_time %s timestanp %s " %(readable_time, timestamp )
- timestamp = timestamp+ 3620 #Add 3 min to server time
- readable_time = strftime(self.time_format, gmtime(float(timestamp)))
+ readable_time = server_localtime.strftime(self.time_format)
- print >>sys.stderr," \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s " %(readable_time , timestamp)
+ print >>sys.stderr," \r\n \r\n \t\t\t\tAPRES ParseTimezone readable_time %s timestanp %s " %(readable_time ,server_timestamp)
reqdict['reservation'] = readable_time
# first step : start the OAR job