%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /usr/lib/python2.7/site-packages/salt/utils/
Upload File :
Create Path :
Current File : //usr/lib/python2.7/site-packages/salt/utils/schedule.pyc

�
���^c@�smdZddlmZmZmZmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl!Zddl"Zddl#Zddl$Zddl%Zddl&m'Z'ddl$m(Z(ddl)m*Z*yddl+j,Z-e.Z/e.Z0Wne1k
r
e2Z/e2Z0nXyddl3Z3e.Z4Wne1k
r:e2Z4nXej5e6�Z7de8fd��YZ9d	�Z:dS(
u!
Scheduling routines are located here. To activate the scheduler make the
``schedule`` option available to the master or minion configurations (master
config file or for the minion via config or pillar).

Detailed tutorial about scheduling jobs can be found :ref:`here
<scheduling-jobs>`.
i(tabsolute_importtwith_statementtprint_functiontunicode_literalsN(tOrderedDict(tSaltInvocationError(tsixtSchedulecB�syeZdZeZeeeeeeed�Zeeeeeeed�Zeeeeeeed�Zd�Z	d�Z
eeed�Zd�Z
d�Zed	�Zd
�Zed�Zed�Zed
�Zed�Zed�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Z ed�Z!d�Z"d�Z#RS(uR
    Create a Schedule object, pass in the opts and the functions dict to use
    c
C�s�|jd	ks|tkr�tjd�tj|�}
|
j||d|d|d|d|d|d|	�|tkr{|
S|
|_n
tjd�|jS(
u6
        Only create one instance of Schedule
        uInitializing new Schedulet	returnerst	intervalstcleanuptproxyt
standalonetutilsuRe-using ScheduleN(tinstancetNonetTruetlogtdebugtobjectt__new__t__singleton_init__(tclstoptst	functionsRR	R
RRtnew_instanceR
R((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyRRs

c

C�sdS(N((
tselfRRRR	R
RRRR
((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt__init__rsc
C�sj||_||_||_|p0tjj|�|_||_d|_d|_	d|_
t|_t
|t�r~||_n	i|_|js�t|d�r�||_q�|jj�|_n|jjdd���|_|jd�|_tj|_|jst|�n|r9x|D]}
|j|
�qWn|	dkr]tjjj�|_n	|	|_dS(Nu__getitem__utimezone.get_offsetcS�sdS(Nu0000((((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt<lambda>�suschedule_returner(RRRtsalttloaderR
RRt
skip_functiontskip_during_rangetsplayRtenabledt
isinstancetdictR	thasattrRt
gen_functionstgetttime_offsettoptiontschedule_returnerRtMAXSIZEt
loop_intervaltclean_proc_dirtdelete_job_prefixtprocesstSubprocessListt_subprocess_list(RRRRR	R
RRR
R1tprefix((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyR}s6												

cC�s|j|j|j|jdfS(N(RRRR	R(R((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt__getnewargs__�scC�s<d|jkr)|jd|idt�S|jj|i�S(u>
        Return options merged from config and pillar
        uconfig.mergetomit_master(RRRR'(Rtopt((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyR)�sc
C�si}|r[|jjdi�jdi�}t|t�sKtd��n|j|�n|r�|jjdi�}t|t�s�td��n|j|�n|rtj|�}xY|D]N}t||t�r�x2||D]#}	|	jd�r�|||	=q�q�Wq�q�Wn|S(u4
        Return the schedule data structure
        upillaruscheduleuSchedule must be of type dict.u_(	RR'R#R$t
ValueErrortupdatetcopytdeepcopyt
startswith(
Rtinclude_optstinclude_pillart
remove_hiddentscheduletpillar_schedulet
opts_schedulet	_scheduletjobtitem((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
_get_schedule�s&!
c	C�s_d|ks|dr|Sd|ks1|dr[d}|jddkretjjj|j�}ntjjj|j�}x�|D]�}d|kr�tjd||�|d|dkrTtjj	j
|d	�rT|d
7}tjd||d�||dkrQtjd
|d|d�d|d<t|d<||d<t|d<|SqTq�q�Wn|S(u4
        Return the schedule data structure
        urunujid_includeiu__roleumasteruscheduleu5schedule.handle_func: Checking job against fun %s: %sunameupidiuEschedule.handle_func: Incrementing jobcount, now %s, maxrunning is %su
maxrunninguNschedule.handle_func: The scheduled job %s was not started, %s already runningu_skip_reasonu_skippedu
_skipped_time(
RRR
tmastertget_running_jobstminiontrunningRRR/t
os_is_runningRtFalse(RtfunctdataRtnowtjobcounttcurrent_jobsRB((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_check_max_running�s8






cC�s�|jjdd
�}|d
krLd|jkrLtjj|jd�}n|d
krgtjj}ntjj	|tjj|jjdtj
jd���}tjj|�s�tj
|�ntjj	|d�}tjd�|jdtdt�}yWtjjj|d��9}|jtjjjtjjji|d	6���Wd
QXWn-ttfk
r�tjddtj�nXd
S(
ue
        Persist the modified schedule into <<configdir>>/<<default_include>>/_schedule.conf
        uconf_diru	conf_fileudefault_includeu_schedule.confuPersisting scheduleR<R=uwb+uscheduleNu&Failed to persist the updated scheduletexc_info_on_loglevel( RR'RtostpathtdirnameRtsyspathst
CONFIG_DIRtjointconfigtDEFAULT_MINION_OPTStisdirtmakedirsRRRDRJRR
tfilestfopentwritetstringutilstto_bytestyamlt	safe_dumptIOErrortOSErrorterrortloggingtDEBUG(Rt
config_dirtminion_d_dirt
schedule_conft
schedule_datatfp_((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytpersist�s0	
	cC�s�||jdkr$|jd|=n+||jdt�krOtjd|�ntjjjdd|jdt�}|j	it
d6|j�d6dd	�||jkr�|j|=n|r�|j�nd
S(uK
        Deletes a job from the scheduler. Ignore jobs from pillar
        uscheduleR;u)Cannot delete job %s, it's in the pillar!uminionRtlistenucompletettagu,/salt/minion/minion_schedule_delete_completeN(
RRDRJRtwarningRR
teventt	get_eventt
fire_eventRR	Rm(RtnameRmtevt((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
delete_jobs$
cC�s5d|_d|_t|_d|_i|jd<dS(u1
        Reset the scheduler to defaults
        uscheduleN(RRR RR"R!R(R((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytreset6s
				cC�s!xAt|jdj��D]&}|j|�r|jd|=qqWx<|jdt�D](}|j|�rWtjd|�qWqWWtj	j
jdd|jdt�}|jit
d6|j�d6dd	�x9t|jj��D]"}|j|�r�|j|=q�q�W|r|j�nd
S(uL
        Deletes a job from the scheduler. Ignores jobs from pillar
        uscheduleR;u)Cannot delete job %s, it's in the pillar!uminionRRnucompleteRou,/salt/minion/minion_schedule_delete_completeN(tlistRtkeysR:RDRJRRpRR
RqRrRsRR	Rm(RRtRmRBRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyR.@s $cC�sqt|t�std��nt|�dks?td��nx/|D]'}d||krFt||d<qFqFWttj|��}||jdt	�kr�t
jd|�n^||jdkr�t
j
d|�|jdj|�n$t
j
d	|�|jdj|�tjjjd
d|jdt	�}|jitd
6|j�d6dd�|rm|j�ndS(u�
        Adds a new job to the scheduler. The format is the same as required in
        the configuration file. See the docs on how YAML is interpreted into
        python data-structures to make sure, you pass correct dictionaries.
        u'Scheduled jobs have to be of type dict.iu,You can only schedule one new job at a time.uenabledR;u)Cannot update job %s, it's in the pillar!uscheduleu+Updating job settings for scheduled job: %suAdded new job %s to scheduleruminionRRnucompleteRou)/salt/minion/minion_schedule_add_completeN(R#R$R6tlenRtnextRtiterkeysRDRJRRpRtinfoR7RR
RqRrRsRm(RRLRmRBtnew_jobRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytadd_jobZs*	
$cC�s�||jdkr;t|jd|d<tjd|�n+||jdt�krftjd|�ntjj	j
dd|jdt�}|jitd	6|j�d6d
d�|r�|j�ndS(
uI
        Enable a job in the scheduler. Ignores jobs from pillar
        uscheduleuenableduEnabling job %s in schedulerR;u)Cannot modify job %s, it's in the pillar!uminionRRnucompleteRou1/salt/minion/minion_schedule_enabled_job_completeN(
RRRR}RDRJRpRR
RqRrRsRm(RRtRmRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
enable_job�s$cC�s�||jdkr;t|jd|d<tjd|�n+||jdt�krftjd|�ntjjj	dd|jdt�}|j
itd	6|j�d6d
d�|r�|j�ndS(
uJ
        Disable a job in the scheduler. Ignores jobs from pillar
        uscheduleuenableduDisabling job %s in schedulerR;u)Cannot modify job %s, it's in the pillar!uminionRRnucompleteRou2/salt/minion/minion_schedule_disabled_job_completeN(
RRJRR}RDRpRR
RqRrRsRRm(RRtRmRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytdisable_job�s$cC�sz||jdkr&|j||�n,||jdt�krRtjd|�dS||jd|<|rv|j�ndS(uI
        Modify a job in the scheduler. Ignores jobs from pillar
        uscheduleR;u)Cannot modify job %s, it's in the pillar!N(RRvRDRJRRpRm(RRtR>Rm((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
modify_job�scC�s&|j�j|i�}d|kr1|d}n8d|krJ|d}nd|krc|d}nd}||jkr�tjd||�nd|kr�||d<nd|kr�t|d<n|js�|j|||j	t
j
j��}n|jd�r"tjd|�|j||�ndS(	u(
        Run a schedule job now
        ufunctionufuncufunu)Invalid function: %s in scheduled job %s.unameurunuRunning Job: %sN(
RDR'RRRR}RRRPRtdatetimeRMt_run_job(RRtRLRK((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytrun_job�s0





		cC�s`t|jdd<tjjjdd|jdt�}|jitd6|j�d6dd�d	S(
u'
        Enable the scheduler.
        uscheduleuenableduminionRRnucompleteRou-/salt/minion/minion_schedule_enabled_completeN(	RRRR
RqRrRJRsRD(RRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytenable_schedule�s$ cC�s`t|jdd<tjjjdd|jdt�}|jitd6|j�d6dd�d	S(
u(
        Disable the scheduler.
        uscheduleuenableduminionRRnucompleteRou./salt/minion/minion_schedule_disabled_completeN(	RJRRR
RqRrRsRRD(RRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytdisable_schedule�s$ cC�sBi|_d|kr"|d}n|jjdi�j|�dS(u?
        Reload the schedule from saved schedule file.
        uscheduleN(R	Rt
setdefaultR7(RR>((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytreload�s	
cC�s�|dkr!|jdt�}n-|dkrB|jdt�}n|j�}tjjjdd|jdt�}|jitd6|d	6d
d�dS(
u1
        List the current schedule items
        upillarR;uoptsR<uminionRRnucompleteuscheduleRou*/salt/minion/minion_schedule_list_completeN(	RDRJRR
RqRrRRsR(RtwhereR>Ru((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyRxs$cC�sL|j�tjjjdd|jdt�}|jitd6dd�dS(u+
        Save the current schedule
        uminionRRnucompleteRou"/salt/minion/minion_schedule_savedN(	RmRR
RqRrRRJRsR(RRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
save_schedules
$cC�sh|d}|d}|jdd�}||jdkr�d|jd|krhg|jd|d<n|jd|dji|d6|d6�d|jd|kr�g|jd|d<n|jd|dji|d6|d6�n+||jdt�krtjd	|�ntjj	j
d
d|jdt�}|jitd
6|j�d6dd�dS(uS
        Postpone a job in the scheduler.
        Ignores jobs from pillar
        utimeunew_timeutime_fmtu%Y-%m-%dT%H:%M:%Suscheduleu
skip_expliciturun_explicitR;u)Cannot modify job %s, it's in the pillar!uminionRRnucompleteRou2/salt/minion/minion_schedule_postpone_job_completeN(
R'RtappendRDRJRRpRR
RqRrRsR(RRtRLttimetnew_timettime_fmtRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytpostpone_jobs$

$cC�s|d}|jdd�}||jdkr�d|jd|kr^g|jd|d<n|jd|dji|d6|d6�n+||jdt�kr�tjd|�ntjj	j
dd	|jd
t�}|jitd6|j�d6dd
�dS(ub
        Skip a job at a specific time in the scheduler.
        Ignores jobs from pillar
        utimeutime_fmtu%Y-%m-%dT%H:%M:%Suscheduleu
skip_explicitR;u)Cannot modify job %s, it's in the pillar!uminionRRnucompleteRou./salt/minion/minion_schedule_skip_job_completeN(
R'RR�RDRJRRpRR
RqRrRsR(RRtRLR�R�Ru((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytskip_job<s
$u%Y-%m-%dT%H:%M:%ScC�s�|j�}d	}|rQ|j|i�jdd	�}|rQ|j|�}qQntjjjdd|jdt	�}|j
itd6|d6dd�d	S(
uA
        Return the next fire time for the specified job
        u_next_fire_timeuminionRRnucompleteunext_fire_timeRou4/salt/minion/minion_schedule_next_fire_time_completeN(RDRR'tstrftimeRR
RqRrRRJRsR(RRttfmtR>t_next_fire_timeRu((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytget_next_fire_timeTs$cC�s|j�}|j|i�S(u4
        Return the specified schedule item
        (RDR'(RRtR>((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
job_statusesc!C�sy
tjjj�s*|jjd�dkr�|jddkratjj|jd|j�|_n*tjj	|jd|j
d|j�|_tjj|j|jd|j
�|_ni|jjdd�d6|d6gd	6|d
d6tjjj
|j�d6}d
|kr�t|d
t�rx|d
|d
<|j|d
d<tj�|d
d<tjdtj��|d
d<q�tjd�n|r�tjjjdj|jj|d��n|jdd �}|jstjj tj!j"|jd�|d�}nz,y�t#}|jjdi�jdt#�rv|jjdi�jdg�}|dkr�||kr�t$}q�nf|jjdi�jdt#�r�|jjdi�jdg�}|dkr�||kr�t$}q�n|r�t%d��ntj&�|d<|js|d|ks |dr|tj'd|�tjj(j)|d��,}	|	j*tj+j,|j�j-|��Wd QXq|nt.�}
d!|kr�|d!}
|d	j/|d!�ni}d"|kr�|d"}|d	j0t1j2|��n||jkr6|jj3|�|d#<tjj4j5d$|jj3|��ntjj6j7|j|�}|j8r�xKt9j:|�D]7\}
}|
d"k	rkt1j2|�|d%j|
�<qkqkWn|jddkrKtjjj
|j�}tjj;j<|d&d'�}tjj;j=|jd|jd(|jdd)|jd*t#�}tjj;j>||d+d �}i|d,6tjj?j@�d-6|d.6tAj
|�d/6}t1j1|j�}tjjBjC||�g}x�t9jD|�D]�}d0|kr�q�n|jEd0d1�\}}||krq�n|j0|�x1t9j:|�D] \}}||j|jF|<q Wq�Wnd2|jjGd3d4<|j||
|�|d#<|js�d4|jjGd3kr�|jjGd3d4|d4<nt$|d5<|s�|jHr�d6|kr�|d6|d7<nd8|kr|d8|d9<ng}xX||jHgD]G}t|t9jI�rD|j0|�qt|tJ�r|j/|�qqWx_tKjL|�D]K}d:j|�}||jkr�|j||�qwtjMd;||�qwWq�nWn_tNk
r.tjOd<|d�d#|krd=j|d�|d#<nt#|d5<d>|d4<nXWd d|jkr�	|jddIkr�	d@|kro|d@roq�	|j1�}|r�|jHr�dA|d<|jd@�dBkr�dB|d<q�nidCdD6|jdd6}x't9j:|�D]\}
}|||
<q�Wd|jkrI	|jdd?krI	tjj;j=d?d)|jd*t#�}nGd|jkr�	|jddkr�	tjj;jP|j|jd(�}ny|jQ|dE�Wq�	tNk
r�	} tjOdF�q�	Xn|jst
tj'dG|�zkytjR|�WnStSk
rL
} | jTtTjUksI
| jTtTjVkr0
qM
tj4dH|| jT��nXWd |rp
tWjXtjYjZj[�nXnXd S(JuA
        Execute this method in a multiprocess or thread
        u	transportuzeromqu__roleumasterR
Ruidufunufun_argsunameuscheduleujidumetadatau_TOSu_TSu%Y %B %d %a %H %mu_TTuNschedule: The metadata parameter must be specified as a dictionary.  Ignoring.u{0} {1}ureturnerucachedirupillaruminion_blackoutuminion_blackout_whitelistusaltutil.refresh_pillarugrainsu�Minion in blackout mode. Set 'minion_blackout' to False in pillar or grains to resume operations. Only saltutil.refresh_pillar allowed in blackout mode.upidujid_includeuBschedule.handle_func: adding this job to the jobcache with data %suw+bNuargsukwargsureturntmessageu	__pub_{0}R2usalt/scheduler/usock_dirRRnt
print_funcu__jid__u__user__u__tag__u
__jid_event__u.iiu__context__uretcodeusuccessu
return_configu
ret_configu
return_kwargsu
ret_kwargsu{0}.returneru,Job %s using invalid returner: %s. Ignoring.uUnhandled exception running %suUnhandled exception running {0}i�uminionu
return_joburequnocacheu_returnucmdu__schedule_returnu2Unhandled exception firing __schedule_return eventu!schedule.handle_func: Removing %suFailed to delete '%s': %s(umasteruminion(\RR
tplatformt
is_windowsRR'RtrunnerRtminion_modsRRtjidtgen_jidR#R$R(R�tctimeR�tgmtimeRRpR/tappendproctitletformatt	__class__t__name__RRRRRSRWRGtget_proc_dirRJRRtgetpidRR\R]R^tpayloadtSerialtdumpsttupletextendR�R8R9tmissing_fun_stringRetraise_errortargstget_function_argspectkeywordsRt	iteritemsRqttagifyRrtNamespacedEventtusertget_usertweakreftlazyt
verify_funR|tsplitt__globals__tpackR*tstring_typesRxRtfromkeysR}t	Exceptiont	exceptiontget_master_eventRstunlinkRdterrnotEEXISTtENOENTtsystexittdefaultst	exitcodest
EX_GENERIC(!Rtmultiprocessing_enabledRKRLtrett
data_returnertproc_fntminion_blackout_violationt	whitelistRlR�tkwargstargspectkeytvalR�RoRqtnamespaced_eventtfunc_globalstself_functionstcompleted_funcstmod_nametmodt_t
global_keytvaluetretstreturnertret_strtmrettloadtexc((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pythandle_funcms:$**#,		!!!!	1	

	&


			
	


"
"	"	$c�s�tjd���jd}t|tj�sDtjd|�}nd�}��fd�}�fd�}���fd�}��fd�}�fd	�}��fd
�}	��fd�}
��fd�}�fd
�}�fd�}
d�}�j�}t|t�s+td��nd|krG|d�_	nd|krc|d�_
nd|kr|d�_nd|kr�|d�_nddddg}x�	t
j|�D]�	\}}||kr�q�nx6ddddddgD]}||kr�||=q�q�Wt�d|kr3|d}n|}|d<t|t�sotjd|t|��q�nd|kr�|d}n8d|kr�|d}nd|kr�|d}ndG}|�jkr�tjd ||�nd!|kr�dG|d!<nd"|krdG|d"<nd#|krF|d#rFd$|krFt|d$<n�s^tjj��nt|j���dI}dJ}gtj|d,�D]}t|�^q�}t�fd-�|D��r�tjd.d/j|��q�ng}xB|D]:}tj|g|�}|jttj|d,���q�Wt�fd0�|D��rttjd1d/j|�d/j|��q�nd2|kr�|||�|d3�ntg|D]}||kr�t^q�kr�||�nWd+|kr�|||�n;d)|kr
|||�nd*|kr�|||�nq�d|krE|drEq�nd|kra|draq�nt||d!�|��j ��}d|kr��j|d<nd|kr�|dr�|d"sF||d�}�|d!tjd|�kr=tj!d4|�|d!tjd|�|d"<d)|krCt|d5<qCqFt�n|d"r�|d"�j �}d)|kr�|d"|d!<q�q�nd6|kr�|d7kr�t�q�n�d)|kr�|d5r�|d!�ko�|d!|knr�t|d5<t�q�n�d*|kr-|d7kr�dG|d!<t�q�nUd+|krm|d!�ko\|d!|knr�t�q�n|d7kr�t�nd$|kr�|d$r�t�t|d$<n��ro	d8|kr	||�d|kr�|dr�q�n|d3�d|kr	|d}q	nd|kr.�j
r.�j
|d<nd|kr�|dr�|
||�d|krm|drmq�n|d3�d|kr�|d}q�nd9|kr�|	||�d|kr�|dr�q�n|d3�d|kr�|d}q�nd:|kr-	|
|�d|kr 	|dr 	q�n|d3�nd;|kro	||�d|kr_	|dr_	q�n|d3�qo	nd|kr�	|dr�	t�n�js�	|j"dt�r�	tjd<|�d=|d<�|d<t|d<t�nd>}|d7kr
d?j#t$|��}nz��r�
d@|ks+
|d@r�
t|d@<tj!dA|�dB|krk
tj!dC||dB�q�
tjdD|�dE|dB<n�j%s�
�|d3<�j&||�j��}|d3�q�
n�r�
tjdF||��j'||�nWdG�r�|dH<dG|d"<nd6|kr��j%rI�tjd|d6�|d!<q�d|kr�|dr��tjd|d6�|d!<q��r��tjd|d6�|d!<q�nXq�WdGS(Ku�
        Evaluate and execute the schedule

        :param datetime now: Override current time with a datetime object instance``

        u%==== evaluating schedule now %s =====u
loop_intervaltsecondscS�sld}t|t�rV|d|dkrFtj|d|d�}qhtjd�ntjd|�}|S(u-
            Calculate splaytime
            uendustartuSschedule.handle_func: Invalid Splay, end must be larger than start. Ignoring splay.iN(RR#R$trandomtrandintRRe(t	splaytimetsplay_((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_splayes
c�s�d|kr�t|jdd��}|t|jdd��d7}|t|jdd��d7}|t|jdd��d	7}||d<|d
s��tjd|d�|d
<n|�jkr�|�_n�tjd|d�|d<nd
S(uk
            Handle schedule item with time elements
            seconds, minutes, hours, days
            u_secondsusecondsiuminutesi<uhoursiudaysi�Qu_next_fire_timeR�u_next_scheduled_fire_timeN(tintR'R�t	timedeltaR,(RLtinterval(RMR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_time_elementsus   

!c	�s2|drI|d�|ks9|d�krI|drIt|d<qIn|dr.|dr.|d}t|tj�s�|jdd�}ytjj|d|�}Wq�ttfk
r�dj|d||d�|d	<tj	|d	�d
SXn||d<||d<|�|kr.t|d<q.nd
S(u8
            Handle schedule item with once
            u_next_fire_timeu_splayu	_continueuonceuonce_fmtu%Y-%m-%dT%H:%M:%Su<Date string could not be parsed: {0}, {1}. Ignoring job {2}.unameu_errorNu_next_scheduled_fire_time(
RR#R�R'tstrptimet	TypeErrorR6R�RRe(RLR,toncetonce_fmt(RM(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_once�s0




c
�s�ts2dj|d�|d<tj|d�dSt|dt�r�g}x�|dD]�}d�jkr�d�jdkr�|�jddkr�t�jddt�s�dj|d�|d<tj|d�dS�jdd|}n�d�jd	kr{|�jd	dkr{t�jd	dt�scd
j|d�|d<tj|d�dS�jd	d|}n|}t|tj�s�yt	j
|�}Wq�tk
r�dj||d�|d<tj|d�dSXn|j|�qVW|dr|j|d�n|j
�xLtj|�D];}t|�d
kr2|�|krm|j|�qmq2q2W|r`|d}|�|kr�|jdt�r�|jdt�r�|dr�d|d<t|d<dSd|krt|�|k�|d<n|ds||d<n||d<|d|kr��r�|dr�||d<t|d<q�q�|jdt�s�d|d<t|d<q�ncd�jkr+d�jdkr+|d�jddkr+t�jddt�sdj|d�|d<tj|d�dS�jdd|d}n�d�jd	kr�|d�jd	dkr�t�jd	dt�s�dj|d�|d<tj|d�dS�jd	d|d}n
|d}t|tj�s*yt	j
|�}Wq*tk
r&dj|d�|d<tj|d�dSXn|�|kr�|jdt�r�|jdt�r�|dr�d|d<t|d<dSd|kr�t|d<n|ds�||d<n||d<|d|kr�|dr�||d<t|d<ndS(u8
            Handle schedule item with when
            u*Missing python-dateutil. Ignoring job {0}.unameu_errorNuwhenupillaruwhensu5Pillar item "whens" must be a dict. Ignoring job {0}.ugrainsu.Grain "whens" must be a dict.Ignoring job {0}.u*Invalid date string {0}. Ignoring job {1}.u_splayiiu_runurunu_next_fire_timeu	_continueu_next_scheduled_fire_timeu2Pillar item "whens" must be dict.Ignoring job {0}.u/Grain "whens" must be a dict. Ignoring job {0}.u&Invalid date string. Ignoring job {0}.(t_WHEN_SUPPORTEDR�RReR#RxRR$R�tdateutil_parsertparseR6R�tsortR8R9RztremoveR'RJRRtbool(RLR,t_whentitwhen_twhen(RMtrunR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_when�s�"		










"








c�sts2dj|d�|d<tj|d�dS|ddkryPtj|d��jtj�|d<tj|d��jtj�|d<Wn@tt	fk
r�dj|d�|d<tj|d�dSX�|dj
�}|d	kr|�jkr|�_qndS(
u8
            Handle schedule item with cron
            u*Missing python-croniter. Ignoring job {0}.unameu_errorNu_next_fire_timeucronu_next_scheduled_fire_timeu&Invalid cron string. Ignoring job {0}.i<(t_CRON_SUPPORTEDR�RReRtcronitertget_nextR�R6tKeyErrort
total_secondsR,(RLR,R�(RMR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_cron9s"&*c�s
g}xX|dD]L}t|tj�r9|j|�q|jtjj|d|d��qWt|d<xLtj|�D];}t|�dkr{|�|kr�|j|�q�q{q{W|r|d�ko�|d|knrt	|d<|d|d<qndS(	u@
            Handle schedule item with run_explicit
            urun_explicitutimeutime_fmturuniiu_next_fire_timeN(
R#R�R�R�RJR8R9RzR�R(RLR,t
_run_explicitt	_run_timeR�(RM(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_run_explicitWs
(
c�s2t|d<g}xX|dD]L}t|tj�rC|j|�q|jtjj|d|d��qWx7tj|�D]&}|�|kr{|j|�q{q{W|r$|d�ko�|d|knr.�jr�t	|d<�j|d<q!d|d<�|d<t	|d	<t|d<q.n
t	|d<d
S(uA
            Handle schedule item with skip_explicit
            urunu
skip_explicitutimeutime_fmtiufuncu_skip_reasonu
_skipped_timeu_skippedN(
RJR#R�R�R�R8R9R�RR(RLR,t_skip_explicitt
_skip_timeR�(RMR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_skip_explicitos(
(	



c�s}ts2dj|d�|d<tj|d�dSt|dt�sqdj|d�|d<tj|d�dS|dd}|dd}t|tj�s�ytj|�}Wq�t	k
r�d	j|d�|d<tj|d�dSXnt|tj�sWytj|�}WqWt	k
rSd
j|d�|d<tj|d�dSXnd|kr�|dr�d|kr�g|d<n||j
d
�}||dkr�|dji|d6d
d6�q�n||krQ|�ko�|knrD�jrt
|d<�j|d<qNd|d<�|d<t
|d<t|d<qyt
|d<n(dj|d�|d<tj|d�dS(uA
            Handle schedule item with skip_explicit
            u*Missing python-dateutil. Ignoring job {0}.unameu_errorNuskip_during_rangeuYschedule.handle_func: Invalid, range must be specified as a dictionary. Ignoring job {0}.ustartuenduEInvalid date string for start in skip_during_range. Ignoring job {0}.uCInvalid date string for end in skip_during_range. Ignoring job {0}.urun_after_skip_rangeurun_explicitu%Y-%m-%dT%H:%M:%Sutimeutime_fmturunufuncu
in_skip_rangeu_skip_reasonu
_skipped_timeu_skippeduUschedule.handle_func: Invalid range, end must be larger than start. Ignoring job {0}.(t_RANGE_SUPPORTEDR�RReR#R$R�R�R�R6R�R�RRRJ(RLR,tstarttendt_run_immediate(RMR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_handle_skip_during_range�sb



	





c�sLts2dj|d�|d<tj|d�dSt|dt�sqdj|d�|d<tj|d�dS|dd}|dd}t|tj�s�ytj|�}Wq�t	k
r�d	j|d�|d<tj|d�dSXnt|tj�sWytj|�}WqWt	k
rSd
j|d�|d<tj|d�dSXn||kr d|dkr�|ddr��|ks��|kr�t
|d<qd
|d<t|d<qH|�ko�|knr�t
|d<qH�jr	t
|d<�j|d<qHd|d<t|d<n(dj|d�|d<tj|d�dS(uA
            Handle schedule item with skip_explicit
            u)Missing python-dateutil. Ignoring job {0}unameu_errorNurangeuXschedule.handle_func: Invalid, range must be specified as a dictionary.Ignoring job {0}.ustartuendu0Invalid date string for start. Ignoring job {0}.u.Invalid date string for end. Ignoring job {0}.uinverturunu
in_skip_rangeu_skip_reasonufuncunot_in_rangeuUschedule.handle_func: Invalid range, end must be larger than start. Ignoring job {0}.(
RR�RReR#R$R�R�R�R6RRJR(RLRR
(RMR(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
_handle_range�sX





	


c�s�ts2dj|d�|d<tj|d�dS|d}t|tj�s`tj|�}n|�kr�tjd|d�d|d<�|d	<t	|d
<t
|d<n
t	|d<dS(u9
            Handle schedule item with after
            u)Missing python-dateutil. Ignoring job {0}unameu_errorNuafteru+After time has not passed skipping job: %s.uafter_not_passedu_skip_reasonu
_skipped_timeu_skippedurun(R�R�RReR#R�R�R�RRRJ(RLtafter(RM(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
_handle_afters"




c�s�ts2dj|d�|d<tj|d�dS|d}t|tj�s`tj|�}n|�kr�tjd|d�d|d<�|d	<t	|d
<t
|d<n
t	|d<dS(u9
            Handle schedule item with until
            u)Missing python-dateutil. Ignoring job {0}unameu_errorNuuntilu'Until time has passed skipping job: %s.uuntil_passedu_skip_reasonu
_skipped_timeu_skippedurun(R�R�RReR#R�R�R�RRRJ(RLtuntil(RM(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt
_handle_until+s"




cS�s|tjd|j�S(uH
            Remove the microseconds from a datetime object
            tmicroseconds(R�R�tmicrosecond(tdt((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt_chop_msEsuSchedule must be of type dict.u
skip_functionuskip_during_rangeuenabledusplayu	_continueu_erroru_enabledu_skippedu_skip_reasonu
_skipped_timeunameu3Scheduled job "%s" should have a dict value, not %sufunctionufuncufunu)Invalid function: %s in scheduled job %s.u_next_fire_timeu_splayurun_on_startu
_run_on_startusecondsuminutesuhoursudaysuwhenucronuonceic3�s|]}|�kVqdS(N((t.0R�(t
schedule_keys(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pys	<genexpr>�su.Unable to use "%s" options together. Ignoring.u", "c3�s!|]}t|��kVqdS(N(tset(Rtx(R(s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pys	<genexpr>�su.Unable to use "%s" with "%s" options. Ignoringurun_expliciturunu=schedule.handle_func: Adding splay of %s seconds to next run.u_runu_secondsiurangeu
skip_explicituuntiluafteruJob: %s is disabledudisableduu  (runtime missed by {0} seconds)ujid_includeu_schedule: Job %s was scheduled with jid_include, adding to cache (jid_include defaults to True)u
maxrunningu6schedule: Job %s was scheduled with a max number of %suMschedule: maxrunning parameter was not specified for job %s, defaulting to 1.iuRunning scheduled job: %s%sNu	_last_run(usecondsuminutesuhoursudays(uwhenucronuonce((RttraceRR#R�R�RDR$R6RR R"R!RR�RJRettypeRRR}RRMRRyt	itertoolstcombinationstanyRWtchainR�R�RRR'R�tabsRRPR�(RRMR,R�R�R�R�RRR
RRRRRR>t_hiddenRBRLRCtjob_nameRKt
time_elementstscheduling_elementsR�tinvalid_sched_combostinvalid_time_combost	all_itemsR�R!tmiss_msg((RMR�RRs7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytevalWs�
	!� F<		









+


+
&
 		
(

(	









	


	
			
	
		

	!!cC�s
|jdt�}|r0tjd|d�dS|jjdt�}|jjdt�}|tkr}|jt||�dS|r�tjj	j
�r�|j}i|_|j}i|_|j}i|_nz|r�tjj
j}	n	tj}	|rwtjj
jtjtj��\|	d|jd|||f�}
|
j�dj|
j|d�|
_|jj|
�WdQXnW|	d|jd|||f�}
|
j�dj|
j|d�|
_|jj|
�Wd|rtjj	j
�r||_||_||_nXdS(	Nudry_runu1Job %s has 'dry_run' set to True. Not running it.unameumultiprocessingurun_schedule_jobs_in_backgroundttargetR�u{}-Schedule-{}(R'RJRRRRR�RR
R�R�RRR/t$SignalHandlingMultiprocessingProcesst	threadingtThreadtdefault_signalstsignaltSIGINTtSIGTERMRR�RtR1tadd(RRKRLtjob_dry_runR�trun_schedule_jobs_in_backgroundRRR
t
thread_clstproc((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyR�wsD						!
!
		cC�s|jj�dS(N(R1R
(R((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pytcleanup_subprocesses�s($R�t
__module__t__doc__RRRJRRRR3R)RRDRPRmRvRwR.RR�R�R�R�R�R�R�RxR�R�R�R�R�R�R,R�R:(((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyRLsl!				/	#	
*	&									����#	3cC�s�x�tjtjj|d��D]n}tjjtjj|d�|�}tjjj	|d��)}d}ytjj|�j
|�}Wn[tk
r�tjjj�r�|j�nytj|�w Wq�tk
r�w q�XnXtjd|�|dk	r�d|kr�tjjj|d�rAtjd|d�q�tjjj�r`|j�nytj|�Wq�tk
r�q�XnWdQXq WdS(u�
    Loop through jid files in the minion proc directory (default /var/cache/salt/minion/proc)
    and remove any that refer to processes that no longer exist
    ucachedirurbu>schedule.clean_proc_dir: checking job %s for process existenceupidu@schedule.clean_proc_dir: Cleaning proc dir, pid %s still exists.N(RRtlistdirRRGR�RSRWR
R\R]RR�R�R�R�R�R�tcloseR�RdRRR/RI(Rtbasefilenametfn_RlRB((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyR-�s8&%





(;R<t
__future__RRRRRRR�R�R8R2R�RR/RfR�R�R�tsalt.configRtsalt.utils.argstsalt.utils.errortsalt.utils.eventtsalt.utils.filestsalt.utils.jidtsalt.utils.mastertsalt.utils.miniontsalt.utils.platformtsalt.utils.processtsalt.utils.stringutilstsalt.utils.usertsalt.utils.yamltsalt.loadertsalt.miniontsalt.payloadt
salt.syspathstsalt.exceptionstsalt.defaults.exitcodestsalt.utils.odictRRtsalt.extRtdateutil.parsertparserR�RR�RtImportErrorRJRR�t	getLoggerR�RRRR-(((s7/usr/lib/python2.7/site-packages/salt/utils/schedule.pyt<module>sp"





������h

Zerion Mini Shell 1.0