Fix issue with delete_after

This commit is contained in:
Twangboy 2023-03-27 18:19:25 -06:00
parent 04741e1881
commit 0e642e1e05
No known key found for this signature in database
GPG key ID: 9B77EE3C5C0D9F63
3 changed files with 106 additions and 6 deletions

1
changelog/63650.fixed.md Normal file
View file

@ -0,0 +1 @@
Fixed the ability to set a scheduled task to auto delete if not scheduled to run again (``delete_after``)

View file

@ -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

View 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