HEX
Server: Apache
System: Linux server2.voipitup.com.au 4.18.0-553.104.1.lve.el8.x86_64 #1 SMP Tue Feb 10 20:07:30 UTC 2026 x86_64
User: posscale (1027)
PHP: 8.2.29
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/schedule.cpython-310.pyc
o

�N�gU��@sXdZddlZddlZddlZddlZddlZddlZddl	Zddl
ZddlZzddlm
ZdZdZWn
ey?dZdZYnwdgZe�e�Zddd�Zgd	�Zd
d�Z	d5dd
�Zd6dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zd7dd�Z dd�Z!dd�Z"d d!�Z#d"d#�Z$d$d%�Z%d&d'�Z&d(d)�Z'd*d+�Zd,d-�Z(d.d/�Z)d0d1�Z*d8d3d4�Z+dS)9z�
Module for managing the Salt schedule on a minion

Requires that python-dateutil is installed on the minion.

.. versionadded:: 2014.7.0

�NTF�*�list�reload)�list_�reload_)�name�
maxrunning�function�splay�range�when�once�once_fmt�returner�jid_include�args�kwargs�_seconds�seconds�minutes�hours�days�enabled�
return_job�metadata�cron�until�after�
return_config�
return_kwargs�run_on_start�skip_during_rangeZrun_after_skip_rangec
Cs�t�dd�}|durdtvrtj�td�}|durtjj}tj�|tj�t�dtj	j
d���}tj�|�s<t�|�tj�|�sGt�|�tj�|d�S)z7
    Return the minion schedule configuration file
    Zconf_dirNZ	conf_file�default_includez_schedule.conf)
�__opts__�get�os�path�dirname�saltZsyspathsZ
CONFIG_DIR�joinZconfigZDEFAULT_MINION_OPTS�isdir�makedirs)�
config_dirZminion_d_dir�r-�I/opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/schedule.py�_get_schedule_config_fileEs&
���


r/cCs*dd�}i}|r|�}t�|�}nVz8tjjjdtd��%}tdd|d�d�}	|	r9|jd	d
d�}
|
r9|
dr9|
d
}Wd�n1sCwYWntyci}d|d<d|d<t	�
d�|YSw|�}gd�}t|���D]s}
|
|vrxqq|
�
d�r�|s�||
=qqd||
vr�d||
d<t�||
�D]6}|tvr�||
|=q�||
|dur�||
|=q�||
|dkr�d||
|<||
|dkr�d||
|<q�|s�||
ds�||
=qqd||
vr�||
d=qq|�r|D]}t||t��r||vr�d||d<q�d||d<q�d
|i}tjjj|dd�S|S)aN
    List the jobs currently scheduled on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.list

        # Show all jobs including hidden internal jobs
        salt '*' schedule.list show_all=True

        # Hide disabled jobs from list of jobs
        salt '*' schedule.list show_disabled=False

    cSs|i}t�}tj�|�r<tjj�|��"}|��}|r,t	�
|�}|�di�}Wd�|SWd�|S1s7wY|S)N�schedule)r/r%r&�existsr(�utils�files�fopen�read�yaml�	safe_loadr$)r0Zschedule_config�fp_Z
schedule_yamlZschedule_contentsr-r-r.�
_get_savedvs

��
��zlist_.<locals>._get_saved�minion��opts�
event.firer)�func�where�manage_schedulez*/salt/minion/minion_schedule_list_complete���tag�wait�completer0N�1Event module not available. Schedule list failed.�commentT�result)rZ
skip_functionr!�__r�true�falseFrZsaved)Zdefault_flow_style)�pycopy�deepcopyr(r2�event�	get_eventr#�__salt__�KeyError�log�debugr�keys�
startswith�copy�
SCHEDULE_CONF�
isinstance�dictr6�	safe_dump)�show_allZ
show_disabledr?�return_yaml�offliner9r0Zsaved_schedule�	event_bus�res�	event_ret�retZ_hiddenZjob�item�tmpr-r-r.rbs�
�����

�

�
��rcCs4tdddd�}|s|�dd�S||vr||SiS)a!
    List a Job only if its enabled

    If job is not specified, indicate
    if the scheduler is enabled or disabled.

    .. versionadded:: 2015.5.3

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.is_enabled name=job_name
        salt '*' schedule.is_enabled
    z
schedule.listF�r[r\rT)rPr$)r�current_scheduler-r-r.�
is_enabled�srfc	Ks4gidd�}tdd|�d�d�}t�|�D]�}|dkrq|�d�r"qd|vr:|dr:d|d	<|d
�d|�d��q|�d�rT||=|d
�d
|�d��d|d|<q|�dd�}zatjjj	dt
d��N}td|d|d�d�}|r�|j	ddd�}|r�|dr�|d}||vr�d|d	<d|d|<|d
�d
|�d��n|d
�d�|��d|d	<Wd�n1s�wYWqt
y�d|d
<d|d	<Yqw|�d��rt�}	z.tjj�|	d ��}
|
�tjj�tjj�d|i���Wd�W|S1s�wYW|St�ytjd!tjd"�Y|Sw|S)#z�
    Purge all the jobs currently scheduled on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.purge

        # Purge jobs on Salt minion
        salt '*' schedule.purge

    T�rG�changesrHFr]�r[r\r]rrI�testrHrG�Job: �  would be deleted from schedule.z
Deleted job: � from schedule.�removedrh�persistr:r;r=�delete�rr>ror@�,/salt/minion/minion_schedule_delete_completerArBrEr0�&Failed to delete job {} from schedule.N�0Event module not available. Schedule add failed.�wb+�&Failed to persist the updated schedule�Zexc_info_on_loglevel)rr$rLrMrU�appendr(r2rNrOr#rP�formatrQr/r3r4�write�stringutils�to_bytesr6rZ�OSErrorrR�error�logging�DEBUG)rrarerror^r_r`Z
_schedule_ret�
schedule_confr8r-r-r.�purge�s��

�
��
��������������r�c	Ks�d|�d�did�}|sd|d<d|vr&|dr&d|�d	�|d<d
|d<|S|�d�r�td
d
d|�d�d�}||=t�}z+tjj�|d��}|�tjj�	tjj
�d|i���Wd�n1sawYWntyxt
jdtjd�Ynwd
|d<d|�d�|d<d|d|<|S|�dd
�}|td
d
d|�d�d�vr�|d|d�}n|td
dd|�d�d�vr�|dddd�}n
d|�d�|d<|Szvtjjjdtd��a}td |d!�}	|	�r|jd"d#d$�}
|
�r|
d%�r(|
d}||v�rd
|d<d&�|�|d<d|d|<nd'�|�|d<|Wd�WSWd�W|SWd�W|SWd�W|S1�s5wYW|St�yKd(|d<Y|Sw))z�
    Delete a job from the minion's schedule

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.delete job1

        # Delete job on Salt minion when the Salt minion is not running
        salt '*' schedule.delete job1

    zFailed to delete job rmF�rGrHrh�Job name is required.rGrjrkrlTrHr]r<)r[r?r\r]rur0NrvrwzDeleted Job rnrhrorprq�pillar�rr?r>ro�Job � does not exist.r:r;r=r@rrrArBrEzDeleted Job {} from schedule.rsrt)r$rr/r(r2r3r4rzr{r|r6rZr}rRr~rr�rNrOr#rPryrQ)rrrarer�r8ro�
event_datar^r_r`r0r-r-r.rpFs�
�R
������
��5�����
�����������
�rpc	Ks0gdd�}|sd|d<d|d<|Si}tjj��||<|d||d<d}dD]}||vr3d	|vr3d}||vr=d
|vr=d}q'|rJd|d<d|d<|Sd	|vr\d
|vr\d|d<d|d<|SdD]}||vrl|||||<q^d
|vry|d
||d
<d|vr�|d||d<d|vr�t|dt�r�|d||d<n
d|d<d|d<|Sd|vr�t|dt�r�|d||d<n
d|d<d|d<|Sd|vr�|d||d<nd||d<d|vr�|d||d<n|||d<d|vr�|d||d<nd||d<|�dd�||d<d|v�r<t|dt��r4tjj��||d<|dd||dd<|dd||dd<n|d||d<d	|v�r�t�sNd|d<d|d<|S|d	}t|t��s[|g}|D]#}zt	�
|�W�q]t�y�d|d<d�|�|d<|YSwdD]}||v�r�|||||<�q�||S) z�
    Build a schedule job

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.build_schedule_item job1 function='test.ping' seconds=3600
    T�rGrHr�rGFrHr	�rrrrrrzUUnable to use "seconds", "minutes", "hours", or "days" with "when" or "cron" options.�<Unable to use "when" and "cron" options together.  Ignoring.rrZjob_argsrz5job_args is not a list. please correct and try again.Z
job_kwargsrz7job_kwargs is not a dict. please correct and try again.r�rrrr
�start�endz/Missing dateutil.parser, "when" is unavailable.z'Schedule item {} for "when" in invalid.)rrr
rrrrrrrr r!)
r(r2�odict�OrderedDictrXrrYr$�_WHEN_SUPPORTED�dateutil_parser�parse�
ValueErrorry)rrrar0�
time_conflictrbZ
validate_whenZ_whenr-r-r.�build_schedule_item�s�
���

��
�r�c	Ks�d|�d�did�}tdd|�d�d�}||vr&d|�d	�|d
<d|d<|S|s0d|d
<d|d<d}d
D]}||vr@d|vr@d}||vrJd|vrJd}q4|rSd|d
<|Sd|vrad|vrad|d
<|S|�dd�}t|fi|��}d|vry|dsy|Si}|||<d|vr�|dr�d|�d�|d
<d|d<|S|�d�r�|�|�t�}	z+tjj�|	d��}
|
�	tjj
�tjj�
d|i���Wd�n1s�wYWnty�tjdtjd�Ynwd|d<d|�d�|d
<d|d|<|Sz|tjjjdtd��g}td ||d!|d"�d#�}|�r@|jd$d%d&�}
|
�rI|
d'�rR|
d}||v�r[d|d<d(�|�|d
<d|d|<|Wd�WSWd�W|SWd�W|SWd�W|SWd�W|S1�shwYW|St�y~d)|d
<Y|Sw)*a�
    Add a job to the schedule

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.add job1 function='test.ping' seconds=3600
        # If function have some arguments, use job_args
        salt '*' schedule.add job2 function='cmd.run' job_args="['date >> /tmp/date.log']" seconds=60

        # Add job to Salt minion when the Salt minion is not running
        salt '*' schedule.add job1 function='test.ping' seconds=3600 offline=True

    zFailed to add job z
 to schedule.Fr�Tr]rir�z already exists in schedule.rGrHr�r�rrz\Error: Unable to use "seconds", "minutes", "hours", or "days" with "when" or "cron" options.r�rorjrkz would be added to schedule.rur0NrvrwzAdded job: Zaddedrhr:r;r=�add�rr0r>ror@z)/salt/minion/minion_schedule_add_completerArBrEzAdded job: {} to schedule.rt)rr$r��updater/r(r2r3r4rzr{r|r6rZr}rRr~rr�rNrOr#rPryrQ)rrrarer�rbro�_new�
schedule_datar�r8r^r_r`r0r-r-r.r�;s�
����4
�
����
�����	�
��
���������
�r�c
	Ks�didd�}d}dD]}||vrd|vrd}||vr d|vr d}q
|r-d|d<d	|d
<|Sd|vr?d|vr?d|d<d|d
<|Stdd|�d�d
�}||vr[d|�d�|d
<d|d<|S||}d|vrj|�d�|d<d|vru|�d�|d<t|fi|��}|�dd�d|vr�|ds�|S||kr�d|�d�|d
<|Stjj�|�tjj�|�d�|d|<d|vr�|dr�d|�d�|d
<|S|�d��r||�|�t	�}z+tjj
�|d��}	|	�tjj
�tjj�d|i���Wd�n1s�wYWnt�y
tjdtjd�Ynwd|d<d|�d�|d
<|S|�d d�}
|tdd!dd"�v�r4||d#|
d$�}n|tdd%dd"�v�rF||d%d#dd&�}td'|d(�}|�rZd|�d�|d
<|Sd)|�d�|d
<d|d<|S)*aD
    Modify an existing job in the schedule

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.modify job1 function='test.ping' seconds=3600

        # Modify job on Salt minion when the Salt minion is not running
        salt '*' schedule.modify job1 function='test.ping' seconds=3600 offline=True

    �TrgFr�rrrHzQError: Unable to use "seconds", "minutes", "hours", or "days" with "when" option.rGr�r]rir�z does not exist in schedule.r	rrrjNz in correct state)�old�newrhrkz would be modified in schedule.rur0rvrwzModified job: �
 in schedule.ror<�r[r?r\�modifyr�r�)rr0r?r>ror=r@zFailed to modify job )rr$�popr�r(r2r�r�r�r/r3r4rzr{r|r6rZr}rRr~rr�rP)
rrrar�rbreZ_currentr�r�r8ror��outr-r-r.r��s�����/�����
������r�cCs�gdd�}|sd|d<d|d<tddd�}||vrU||}d|vr1|ds1|s1d	|�d
�|d<|Std|dd
�d�}|rGd|�d�|d<|Sd|�d�|d<d|d<|Sd	|�d�|d<d|d<|S)z�
    Run a scheduled job on the minion immediately

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.run_job job1

        salt '*' schedule.run_job job1 force=True
        Force the job to run even if it is disabled.
    Tr�r�rGFrHrdrr�z
 is disabled.r=�run_job�rr>r@zScheduling Job z on minion.zFailed to run job r�)rrP)r�forcerar0�datar�r-r-r.r�/s,

�
���r�c	Ks�gdid�}|sd|d<d|d<dtvr"tdr"d|�d	�|d<|S|�d
d�}|tdddd�vr8|d
|d�}n|tdddd�vrI|dd
dd�}nd|�d�|d<d|d<|Sz}tjjjdtd��i}td|d�}|r�|jddd�}|r�|dr�|d}||vr�||dr�d|d<d|�d�|d<d|d|<nd|d<d |�d�|d<|Wd!�WSWd!�W|SWd!�W|SWd!�W|S1s�wYW|Sty�d"|d<Y|Sw)#z�
    Enable a job in the minion's schedule

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.enable_job job1
    Tr�r�rGFrHrjrkz would be enabled in schedule.ror<r��
enable_jobrqr�r�r�r�r:r;r=r@z1/salt/minion/minion_schedule_enabled_job_completerArBrEr0rzEnabled Job r�rhzFailed to enable job N�7Event module not available. Schedule enable job failed.)	r#r$rr(r2rNrOrPrQ�	rrraror�r^r_r`r0r-r-r.r�Wsh(�����������
�r�c	Ks�gdid�}|sd|d<d|d<d|vr"|dr"d|�d	�|d<|S|�d
d�}|tdddd�vr8|d
|d�}n|tddd�vrH|dd
dd�}nd|�d�|d<d|d<|Sz}tjjjdtd��i}td|d�}|r�|jddd�}|r�|dr�|d}||vr�||ds�d|d<d|�d�|d<d |d!|<nd|d<d"|�d�|d<|Wd#�WSWd#�W|SWd#�W|SWd#�W|S1s�wYW|Sty�d$|d<Y|Sw)%z�
    Disable a job in the minion's schedule

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.disable_job job1
    Tr�r�rGFrHrjrkz would be disabled in schedule.ror<r��disable_jobrqr�)r[r?r�r�r�r:r;r=r@z2/salt/minion/minion_schedule_disabled_job_completerArBrEr0rz
Disabled Job r��disabledrhzFailed to disable job Nr�)	r$rr(r2rNrOr#rPrQr�r-r-r.r��sj*���
���������
�r�cKs�gdd�}d|vr|drd|d<|SzYtjjjdtd��E}tdd	d
id�}|rP|jdd
d�}|r?|dr?d|d<d|d<nd|d<d|d<Wd�W|SWd�W|SWd�W|S1sewYW|Styzd|d<Y|Sw)z{
    Save all scheduled jobs on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.save
    Tr�rjzSchedule would be saved.rGr:r;r=r>Z
save_scheduler@z"/salt/minion/minion_schedule_savedrArBrErHz"Schedule (non-pillar items) saved.FzFailed to save schedule.Nz1Event module not available. Schedule save failed.�r(r2rNrOr#rPrQ)rrar^r_r`r-r-r.�save�sB
���

�������
�r�cKs>gidd�}d|vr|drd|d<|S|�dd�}zvtjjjdtd��b}td	d
|d�d�}|rk|jd
dd�}|rt|dr}|d}d|vrY|drYd|d<d|d<d|dd<nd|d<d|d<|Wd�WSWd�W|SWd�W|SWd�W|S1s�wYW|Sty�d|d<Y|Sw)z
    Enable all scheduled jobs on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.enable
    TrgrjzSchedule would be enabled.rGror:r;r=�enable�r>ror@z-/salt/minion/minion_schedule_enabled_completerArBrEr0rrHzEnabled schedule on minion.rhFz$Failed to enable schedule on minion.Nr��r$r(r2rNrOr#rPrQ�rraror^r_r`r0r-r-r.r���P�
����������
�r�cKs>gidd�}d|vr|drd|d<|S|�dd�}zvtjjjdtd��b}td	d
|d�d�}|rk|jd
dd�}|rt|dr}|d}d|vrY|dsYd|d<d|d<d|dd<nd|d<d|d<|Wd�WSWd�W|SWd�W|SWd�W|S1s�wYW|Sty�d|d<Y|Sw)z�
    Disable all scheduled jobs on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.disable
    TrgrjzSchedule would be disabled.rGror:r;r=�disabler�r@z./salt/minion/minion_schedule_disabled_completerArBrEr0rrHzDisabled schedule on minion.r�rhFz%Failed to disable schedule on minion.Nz8Event module not available. Schedule disable job failed.r�r�r-r-r.r�%r�r�cCs�gdd�}dtvr%tdid�}|r|d�d�n|d�d�d	|d
<d�tdtj�td
��}tj�|�r�t	j
j�|d��1}z	t	j
j
�|�}Wnt	j
j
jyj}z|d�d|���WYd}~nd}~wwWd�n1suwY|r�d|vr�|dr�tdd|d�d�}|r�|d�d�|S|d�d�d	|d
<|S|d�d�d	|d
<|S|d�d�d	|d
<|S)z�
    Reload saved scheduled jobs on the minion

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.reload
    Tr�r0r=Zpillar_refreshrGz(Reloaded schedule from pillar on minion.z0Failed to reload schedule from pillar on minion.FrHz{}/{}/schedule.confr,r"�rbz'Unable to read existing schedule file: Nr)r>r0r@z/Reloaded schedule on minion from schedule.conf.z7Failed to reload schedule on minion from schedule.conf.zEFailed to reload schedule on minion.  Saved file is empty or invalid.)Z
__pillar__rPrxryr#r%r&r'�isfiler(r2r3r4r6r7Z	YAMLError)rar�Zsfnr8r0�excr-r-r.rQsZ
� ����
��������rcKsjgdd�}|sd|d<d|d<d|vr!|dr!d|�d	�|d<|Stdd
dd�}tdddd�}||vr:||}d
}n||vrE||}d}nd|�d�|d<d|d<|Sg}|��D]\}	}
|	�d|
��}|�|�qYtd|d|�}g}
g}|D]}|�|�||s�|
�|�qx|s�d|d<|S|
r�d|d<|
|d<|St||d�d|d<d|�d�|d<||d<|S)z�
    Move scheduled job to another minion or minions.

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.move jobname target
    Tr�r�rGFrHrjrkz would be moved from schedule.r<r�r�Nr�r��=�publish.publish�schedule.add�6no servers answered the published schedule.add command�"the following minions return False�minions)r?z
Moved Job rm)r�itemsrxrPrp)r�targetrra�
opts_schedule�pillar_scheduler�r?�
schedule_opts�key�value�temp�response�errorsr�r:r-r-r.�move�sT
,�

�r�cKsVgdd�}|sd|d<d|d<d|vr!|dr!d|�d	�|d<|Stdd
dd�}tdddd�}||vr8||}n||vrA||}nd
|�d�|d<d|d<|Sg}|��D]\}}	|�d|	��}
|�|
�qUtd|d|�}g}g}
|D]}|
�|�||s�|�|�qt|s�d|d<|S|r�d|d<||d<|Sd|d<d|�d�|d<|
|d<|S)z�
    Copy scheduled job to another minion or minions.

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.copy jobname target
    Tr�r�rGFrHrjrkz would be copied from schedule.r<r�r�r�r�r�r�r�r�r�r�zCopied Job z from schedule to minion(s).)rr�rxrP)rr�rrar�r�r�r�r�r�r�r�r�r�r:r-r-r.rV�sN
)�



�rVc	Ks�|�d�pd}gdd�}|sd|d<d|d<|S|s$d	|d<d|d<|Sz	tj�||�WnttfyIt�d
||�d|d<d|d<|YSw|sVd|d<d|d<|Sz	tj�||�Wnttfy{t�d
||�d|d<d|d<|YSwd
tvr�td
r�d|�d�|d<|S|tdddd�vr�||||dd�}n!|tdddd�vr�||||ddd�}nd|�d�|d<d|d<|Szzt	j
jjdtd��e}t
d|d�}|�r|jddd�}	|	�r|	d�r'|	d }
||
vr�|
|d!r�d|d<d"�|�|d<nd|d<d#|�d$�|d<|Wd%�WSWd%�W|SWd%�W|SWd%�W|S1�s4wYW|St�yJd&|d<Y|Sw)'a�
    Postpone a job in the minion's schedule

    Current time and new time should be in date string format,
    default value is %Y-%m-%dT%H:%M:%S.

    .. versionadded:: 2018.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.postpone_job job current_time new_time

        salt '*' schedule.postpone_job job current_time new_time time_fmt='%Y-%m-%dT%H:%M:%S'
    �time_fmt�%Y-%m-%dT%H:%M:%STr�r�rGFrHzJob current time is required.�'Date string could not be parsed: %s, %s� Date string could not be parsed.zJob new_time is required.rjrkz  would be postponed in schedule.r<r��postpone_job)r�time�new_timer�r>r�)rr�r�r�r?r>r�r�r:r;r=r@z2/salt/minion/minion_schedule_postpone_job_completerArBrEr0rzPostponed Job {} in schedule.zFailed to postpone job r�Nz9Event module not available. Schedule postpone job failed.�r$�datetime�strptime�	TypeErrorr�rRr~r#rr(r2rNrOrPryrQ)r�current_timer�rr�rar�r^r_r`r0r-r-r.r�
s�
��2���	�
�
���������
�r�c
	Ks |�d�pd}gdd�}|sd|d<d|d<|s!d	|d<d|d<n&z	tj�||�WnttfyFt�d
||�d|d<d|d<|YSwdtvrYtdrYd
|�d�|d<|S|tdddd�vrj|||dd�}n |tdddd�vr||||ddd�}nd|�d�|d<d|d<|Szvt	j
jjdtd��b}t
d|d�}|r�|jddd�}|r�|dr�|d}	||	vr�|	|d r�d|d<d!�|�|d<nd|d<d"|�d#�|d<|Wd$�WSWd$�W|SWd$�W|SWd$�W|S1s�wYW|St�yd%|d<Y|Sw)&a
    Skip a job in the minion's schedule at specified time.

    Time to skip should be specified as date string format,
    default value is %Y-%m-%dT%H:%M:%S.

    .. versionadded:: 2018.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.skip_job job time
    r�r�Tr�r�rGFrHzJob time is required.r�r�rjrkz would be skipped in schedule.r<r��skip_job)rr�r�r>r�)rr�r�r?r>r�r�r:r;r=r@z./salt/minion/minion_schedule_skip_job_completerArBrEr0rzAdded Skip Job {} in schedule.zFailed to skip job r�Nz5Event module not available. Schedule skip job failed.r�)
rr�rr�rar�r^r_r`r0r-r-r.r�{s�

�.����
���������
�r�cKs�ddi}|sd|d<d|d<z0|dd�}tjjjdtd	��}td
|d�}|r.|jdd
d�}Wd�n1s8wYWntySi}d|d<d|d<|YSwd|vr`|d|d<|Sd|d<|S)z�
    Show the next fire time for scheduled job

    .. versionadded:: 2018.3.0

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.show_next_fire_time job_name

    rHTr�rGFZget_next_fire_timer�r:r;r=r@z4/salt/minion/minion_schedule_next_fire_time_completerArBNz@Event module not available. Schedule show next fire time failed.Znext_fire_timeznext fire time not available.r�)rrrar�r^r_r`r-r-r.�show_next_fire_time�s8
������	�r�r�c	Cs�dd�}i}zEtjjjdtd��1}tdd|dd�d	�}|r8|jd
dd�}|�d
i�}|||�Wd�WSWd�WdS1sDwYWdStyei}d|d<d|d<t�	d�|YSw)z�
    Show the information for a particular job.

    CLI Example:

    .. code-block:: bash

        salt '*' schedule.job_status job_name

    cs�fdd�|��D�S)Ncs,i|]\}}|t|tj�r|���n|�qSr-)rXr��strftime)�.0r�r��r�r-r.�
<dictcomp>s�
��zRjob_status.<locals>.convert_datetime_objects_in_dict_to_string.<locals>.<dictcomp>)r�)Z	data_dictr�r-r�r.�*convert_datetime_objects_in_dict_to_strings
�z>job_status.<locals>.convert_datetime_objects_in_dict_to_stringr:r;r=�
job_statusT)r>rZ
fire_eventr@z0/salt/minion/minion_schedule_job_status_completerArBr�NrFrGrH)
r(r2rNrOr#rPr$rQrRrS)	rr�r�r0r^r_r`r�rar-r-r.r��s0

���&�
�r�)FTNTF)N)F)r�),�__doc__rVrLr�rr%r6Zsalt.utils.eventr(Zsalt.utils.filesZsalt.utils.odictZsalt.utils.yamlZdateutil.parser�parserr�r�Z_RANGE_SUPPORTED�ImportErrorZ__proxyenabled__�	getLogger�__name__rRZ__func_alias__rWr/rrfr�rpr�r�r�r�r�r�r�r�r�rr�r�r�r�r�r-r-r-r.�<module>sZ	�

 
�
m\ow
}(=?&,,=A>nW-