mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Fix issue with delete_after
This commit is contained in:
parent
04741e1881
commit
0e642e1e05
3 changed files with 106 additions and 6 deletions
1
changelog/63650.fixed.md
Normal file
1
changelog/63650.fixed.md
Normal file
|
@ -0,0 +1 @@
|
|||
Fixed the ability to set a scheduled task to auto delete if not scheduled to run again (``delete_after``)
|
|
@ -19,6 +19,7 @@ from salt.exceptions import ArgumentValueError, CommandExecutionError
|
|||
|
||||
try:
|
||||
import pythoncom
|
||||
import pywintypes
|
||||
import win32com.client
|
||||
|
||||
HAS_DEPENDENCIES = True
|
||||
|
@ -359,7 +360,13 @@ def list_tasks(location="\\"):
|
|||
task_service.Connect()
|
||||
|
||||
# Get the folder to list tasks from
|
||||
task_folder = task_service.GetFolder(location)
|
||||
try:
|
||||
task_folder = task_service.GetFolder(location)
|
||||
except pywintypes.com_error:
|
||||
msg = "Unable to load location: {}".format(location)
|
||||
log.error(msg)
|
||||
raise CommandExecutionError(msg)
|
||||
|
||||
tasks = task_folder.GetTasks(0)
|
||||
|
||||
ret = []
|
||||
|
@ -1129,12 +1136,13 @@ def edit_task(
|
|||
# TODO: Check triggers for end_boundary
|
||||
if delete_after is False:
|
||||
task_definition.Settings.DeleteExpiredTaskAfter = ""
|
||||
if delete_after in duration:
|
||||
task_definition.Settings.DeleteExpiredTaskAfter = _lookup_first(
|
||||
duration, delete_after
|
||||
)
|
||||
else:
|
||||
return 'Invalid value for "delete_after"'
|
||||
if delete_after in duration:
|
||||
task_definition.Settings.DeleteExpiredTaskAfter = _lookup_first(
|
||||
duration, delete_after
|
||||
)
|
||||
else:
|
||||
return 'Invalid value for "delete_after"'
|
||||
if multiple_instances is not None:
|
||||
task_definition.Settings.MultipleInstances = instances[multiple_instances]
|
||||
|
||||
|
@ -1567,6 +1575,16 @@ def info(name, location="\\"):
|
|||
trigger["delay"] = _reverse_lookup(duration, triggerObj.Delay)
|
||||
else:
|
||||
trigger["delay"] = False
|
||||
if hasattr(triggerObj, "Repetition"):
|
||||
trigger["repeat_duration"] = _reverse_lookup(
|
||||
duration, triggerObj.Repetition.Duration
|
||||
)
|
||||
trigger["repeat_interval"] = _reverse_lookup(
|
||||
duration, triggerObj.Repetition.Interval
|
||||
)
|
||||
trigger[
|
||||
"repeat_stop_at_duration_end"
|
||||
] = triggerObj.Repetition.StopAtDurationEnd
|
||||
triggers.append(trigger)
|
||||
|
||||
properties["settings"] = settings
|
||||
|
|
81
tests/pytests/unit/modules/test_win_task.py
Normal file
81
tests/pytests/unit/modules/test_win_task.py
Normal file
|
@ -0,0 +1,81 @@
|
|||
"""
|
||||
Test the win_task execution module
|
||||
"""
|
||||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
|
||||
import salt.modules.win_task as win_task
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def base_task():
|
||||
task_name = "SaltTest"
|
||||
result = win_task.create_task(
|
||||
task_name,
|
||||
user_name="System",
|
||||
force=True,
|
||||
action_type="Execute",
|
||||
cmd="c:\\salt\\salt-call.bat",
|
||||
)
|
||||
assert result is True
|
||||
yield task_name
|
||||
result = win_task.delete_task(task_name)
|
||||
assert result is True
|
||||
|
||||
|
||||
def test_repeat_interval(base_task):
|
||||
result = win_task.add_trigger(
|
||||
base_task,
|
||||
trigger_type="Daily",
|
||||
trigger_enabled=True,
|
||||
repeat_duration="30 minutes",
|
||||
repeat_interval="30 minutes",
|
||||
)
|
||||
assert result is True
|
||||
|
||||
result = win_task.info(base_task)
|
||||
assert result["triggers"][0]["enabled"] is True
|
||||
assert result["triggers"][0]["trigger_type"] == "Daily"
|
||||
assert result["triggers"][0]["repeat_duration"] == "30 minutes"
|
||||
assert result["triggers"][0]["repeat_interval"] == "30 minutes"
|
||||
|
||||
|
||||
def test_repeat_interval_and_indefinitely(base_task):
|
||||
result = win_task.add_trigger(
|
||||
base_task,
|
||||
trigger_type="Daily",
|
||||
trigger_enabled=True,
|
||||
repeat_duration="Indefinitely",
|
||||
repeat_interval="30 minutes",
|
||||
)
|
||||
assert result is True
|
||||
|
||||
result = win_task.info(base_task)
|
||||
assert result["triggers"][0]["enabled"] is True
|
||||
assert result["triggers"][0]["trigger_type"] == "Daily"
|
||||
assert result["triggers"][0]["repeat_duration"] == "Indefinitely"
|
||||
assert result["triggers"][0]["repeat_interval"] == "30 minutes"
|
||||
|
||||
|
||||
def test_edit_task_delete_after(base_task):
|
||||
result = win_task.add_trigger(
|
||||
base_task,
|
||||
trigger_type="Daily",
|
||||
trigger_enabled=True,
|
||||
end_date=datetime.today().strftime("%Y-%m-%d"),
|
||||
end_time="23:59:59",
|
||||
)
|
||||
assert result is True
|
||||
|
||||
result = win_task.edit_task(base_task, delete_after="30 days")
|
||||
assert result is True
|
||||
|
||||
result = win_task.info(base_task)
|
||||
assert result["settings"]["delete_after"] == "30 days"
|
||||
|
||||
result = win_task.edit_task(base_task, delete_after=False)
|
||||
assert result is True
|
||||
|
||||
result = win_task.info(base_task)
|
||||
assert result["settings"]["delete_after"] is False
|
Loading…
Add table
Reference in a new issue