HEX
Server: LiteSpeed
System: Linux s787.bom1.mysecurecloudhost.com 4.18.0-477.13.1.lve.el8.x86_64 #1 SMP Thu Jun 1 16:40:47 EDT 2023 x86_64
User: mobilech (5348)
PHP: 8.1.34
Disabled: NONE
Upload Files
File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/modules/__pycache__/schedule.cpython-310.pyc
o

;j��@s\dZddlZddlZddlZddlZddlmZddlZddl	Z
ddlZ
ddlZ
zddl
mZdZdZWn
eyAdZdZYnwdgZe�e�Zddd	�Zgd
�Zdd�Z	d6d
d�Zd7dd�Zdd�Zdd�Zdd�Zdd�Zdd�Z d8dd�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/d0�Z*d1d2�Z+d9d4d5�Z,dS):z�
Module for managing the Salt schedule on a minion

Requires that python-dateutil is installed on the minion.

.. versionadded:: 2014.7.0

�N)�OrderedDictTF�*�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&
���


r0cCs*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)r0r&r'�existsr)�utils�files�fopen�read�yaml�	safe_loadr%)r1Zschedule_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�completer1N�1Event module not available. Schedule list failed.�commentT�result)rZ
skip_functionr"�__r�true�falseFrZsaved)Zdefault_flow_style)�pycopy�deepcopyr)r3�event�	get_eventr$�__salt__�KeyError�log�debugr�keys�
startswith�copy�
SCHEDULE_CONF�
isinstance�dictr7�	safe_dump)�show_allZ
show_disabledr@�return_yaml�offliner:r1Zsaved_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)rQr%)r�current_scheduler.r.r/�
is_enabled�srgc	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�rH�changesrIFr^�r\r]r^rrJ�testrIrH�Job: �  would be deleted from schedule.z
Deleted job: � from schedule.�removedri�persistr;r<r>�delete�rr?rprA�,/salt/minion/minion_schedule_delete_completerBrCrFr1�&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%rMrNrV�appendr)r3rOrPr$rQ�formatrRr0r4r5�write�stringutils�to_bytesr7r[�OSErrorrS�error�logging�DEBUG)rrbrfrrpr_r`raZ
_schedule_ret�
schedule_confr9r.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 rnF�rHrIri�Job name is required.rHrkrlrmTrIr^r=)r\r@r]r^rvr1NrwrxzDeleted Job rorirprqrr�pillar�rr@r?rp�Job � does not exist.r;r<r>rArsrBrCrFzDeleted Job {} from schedule.rtru)r%rr0r)r3r4r5r{r|r}r7r[r~rSrr�r�rOrPr$rQrzrR)rrrbrfr�r9rp�
event_datar_r`rar1r.r.r/rqFs�
�R
������
��5�����
�����������
�rqc	Ks$gdd�}|sd|d<d|d<|Si}t�||<|d||d<d}dD]}||vr0d	|vr0d}||vr:d
|vr:d}q$|rGd|d<d|d<|Sd	|vrYd
|vrYd|d<d|d<|SdD]}||vri|||||<q[d
|vrv|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�r6t|dt��r.t�||d<|dd||dd<|dd||dd<n|d||d<d	|v�r{t�sHd|d<d|d<|S|d	}t|t��sU|g}|D]#}zt�|�W�qWt�yzd|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�rHrIr�rHFrIr
�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.)rr
rrrrrrr rr!r")
rrYrrZr%�_WHEN_SUPPORTED�dateutil_parser�parse�
ValueErrorrz)rrrbr1�
time_conflictrcZ
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^rjr�z already exists in schedule.rHrIr�r�r
rz\Error: Unable to use "seconds", "minutes", "hours", or "days" with "when" or "cron" options.r�rprkrlz would be added to schedule.rvr1NrwrxzAdded job: Zaddedrir;r<r>�add�rr1r?rprAz)/salt/minion/minion_schedule_add_completerBrCrFzAdded job: {} to schedule.ru)rr%r��updater0r)r3r4r5r{r|r}r7r[r~rSrr�r�rOrPr$rQrzrR)rrrbrfr�rcrp�_new�
schedule_datar�r9r_r`rar1r.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
<|St|�t|�d�|d|<d|vr�|dr�d|�d�|d
<|S|�d��r||�|�t�}z+tjj	�
|d��}	|	�tjj�
tjj�d|i���Wd�n1s�wYWnt�ytjdtjd�Ynwd|d<d|�d�|d
<|S|�d d�}
|tdd!dd"�v�r.||d#|
d$�}n|tdd%dd"�v�r@||d%d#dd&�}td'|d(�}|�rTd|�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

    �TrhFr�r
rrIzQError: Unable to use "seconds", "minutes", "hours", or "days" with "when" option.rHr�r^rjr�z does not exist in schedule.r
rrrkNz in correct state)�old�newrirlz would be modified in schedule.rvr1rwrxzModified job: �
 in schedule.rpr=�r\r@r]�modifyr�r�)rr1r@r?rpr>rAzFailed to modify job )rr%�popr�rr�r0r)r3r4r5r{r|r}r7r[r~rSrr�r�rQ)
rrrbr�rcrfZ_currentr�r�r9rpr��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�rHFrIrerr�z
 is disabled.r>�run_job�rr?rAzScheduling Job z on minion.zFailed to run job r�)rrQ)r�forcerbr1�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�rHFrIrkrlz would be enabled in schedule.rpr=r��
enable_jobrrr�r�r�r�r;r<r>rAz1/salt/minion/minion_schedule_enabled_job_completerBrCrFr1rzEnabled Job r�rizFailed to enable job N�7Event module not available. Schedule enable job failed.)	r$r%rr)r3rOrPrQrR�	rrrbrpr�r_r`rar1r.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�rHFrIrkrlz would be disabled in schedule.rpr=r��disable_jobrrr�)r\r@r�r�r�r;r<r>rAz2/salt/minion/minion_schedule_disabled_job_completerBrCrFr1rz
Disabled Job r��disabledrizFailed to disable job Nr�)	r%rr)r3rOrPr$rQrRr�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�rkzSchedule would be saved.rHr;r<r>r?Z
save_schedulerAz"/salt/minion/minion_schedule_savedrBrCrFrIz"Schedule (non-pillar items) saved.FzFailed to save schedule.Nz1Event module not available. Schedule save failed.�r)r3rOrPr$rQrR)rrbr_r`rar.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
    TrhrkzSchedule would be enabled.rHrpr;r<r>�enable�r?rprAz-/salt/minion/minion_schedule_enabled_completerBrCrFr1rrIzEnabled schedule on minion.riFz$Failed to enable schedule on minion.Nr��r%r)r3rOrPr$rQrR�rrbrpr_r`rar1r.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
    TrhrkzSchedule would be disabled.rHrpr;r<r>�disabler�rAz./salt/minion/minion_schedule_disabled_completerBrCrFr1rrIzDisabled schedule on minion.r�riFz%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�r1r>Zpillar_refreshrHz(Reloaded schedule from pillar on minion.z0Failed to reload schedule from pillar on minion.FrIz{}/{}/schedule.confr-r#�rbz'Unable to read existing schedule file: Nr)r?r1rAz/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__rQryrzr$r&r'r(�isfiler)r3r4r5r7r8Z	YAMLError)rbr�Zsfnr9r1�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�rHFrIrkrlz 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 rn)r�itemsryrQrq)r�targetrrb�
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�rHFrIrkrlz 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�ryrQ)rr�rrbr�r�r�r�r�r�r�r�r�r�r;r.r.r/rW�sN
)�



�rWc	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�rHFrIzJob current time is required.�'Date string could not be parsed: %s, %s� Date string could not be parsed.zJob new_time is required.rkrlz  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>rAz2/salt/minion/minion_schedule_postpone_job_completerBrCrFr1rzPostponed Job {} in schedule.zFailed to postpone job r�Nz9Event module not available. Schedule postpone job failed.�r%�datetime�strptime�	TypeErrorr�rSrr$rr)r3rOrPrQrzrR)r�current_timer�rr�rbr�r_r`rar1r.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�rHFrIzJob time is required.r�r�rkrlz would be skipped in schedule.r=r��skip_job)rr�r�r?r�)rr�r�r@r?r�r�r;r<r>rAz./salt/minion/minion_schedule_skip_job_completerBrCrFr1rzAdded Skip Job {} in schedule.zFailed to skip job r�Nz5Event module not available. Schedule skip job failed.r�)
rr�rr�rbr�r_r`rar1r.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

    rITr�rHFZget_next_fire_timer�r;r<r>rAz4/salt/minion/minion_schedule_next_fire_time_completerBrCNz@Event module not available. Schedule show next fire time failed.Znext_fire_timeznext fire time not available.r�)rrrbr�r_r`rar.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.)rYr��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_eventrAz0/salt/minion/minion_schedule_job_status_completerBrCr�NrGrHrI)
r)r3rOrPr$rQr%rRrSrT)	rr�r�r1r_r`rar�rbr.r.r/r��s0

���&�
�r�)FTNTF)N)F)r�)-�__doc__rWrMr�r�r&�collectionsrr7Zsalt.utils.eventr)Zsalt.utils.filesZsalt.utils.yamlZdateutil.parser�parserr�r�Z_RANGE_SUPPORTED�ImportErrorZ__proxyenabled__�	getLogger�__name__rSZ__func_alias__rXr0rrgr�rqr�r�r�r�r�r�r�r�r�rr�r�r�r�r�r.r.r.r/�<module>sZ	�

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