mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
When a job is disabled only increase it's _next_fire_time value if the job would have run at the current time, eg. the current _next_fire_time == now.
This commit is contained in:
parent
c475db0b6f
commit
cf441d46a9
2 changed files with 144 additions and 3 deletions
|
@ -1769,9 +1769,10 @@ class Schedule:
|
|||
seconds=data["_seconds"]
|
||||
)
|
||||
elif "_skipped" in data and data["_skipped"]:
|
||||
data["_next_fire_time"] = now + datetime.timedelta(
|
||||
seconds=data["_seconds"]
|
||||
)
|
||||
if data["_next_fire_time"] == now:
|
||||
data["_next_fire_time"] = now + datetime.timedelta(
|
||||
seconds=data["_seconds"]
|
||||
)
|
||||
elif run:
|
||||
data["_next_fire_time"] = now + datetime.timedelta(
|
||||
seconds=data["_seconds"]
|
||||
|
|
|
@ -502,6 +502,146 @@ def test_eval_disabled(schedule):
|
|||
assert ret == job["schedule"][job_name]
|
||||
|
||||
|
||||
def test_eval_disabled_seconds(schedule):
|
||||
"""
|
||||
verify that scheduled job does not run
|
||||
"""
|
||||
|
||||
job_name = "test_eval_disabled_seconds"
|
||||
job = {
|
||||
"schedule": {
|
||||
"enabled": True,
|
||||
job_name: {"function": "test.ping", "seconds": "30"},
|
||||
}
|
||||
}
|
||||
|
||||
# Add the job to the scheduler
|
||||
schedule.opts.update(job)
|
||||
|
||||
eval_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
|
||||
schedule.eval(now=eval_time1)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 0, 30)
|
||||
|
||||
# Disable the job
|
||||
schedule.opts["schedule"]["enabled"] = False
|
||||
|
||||
# Evaluate 1 second for 29 seconds
|
||||
# Assert that the _next_fire_time does not change
|
||||
# until the _next_fire_time is reached
|
||||
for i in range(1, 30):
|
||||
eval_time = eval_time1 + datetime.timedelta(seconds=i)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 0, 30)
|
||||
|
||||
eval_time = eval_time1 + datetime.timedelta(seconds=30)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 1, 0)
|
||||
|
||||
|
||||
def test_eval_disabled_minutes(schedule):
|
||||
"""
|
||||
verify that scheduled job does not run
|
||||
"""
|
||||
|
||||
job_name = "test_eval_disabled_minutes"
|
||||
job = {
|
||||
"schedule": {
|
||||
"enabled": True,
|
||||
job_name: {"function": "test.ping", "minutes": "55"},
|
||||
}
|
||||
}
|
||||
|
||||
# Add the job to the scheduler
|
||||
schedule.opts.update(job)
|
||||
|
||||
eval_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
|
||||
schedule.eval(now=eval_time1)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 55, 0)
|
||||
|
||||
# Evaluate 1 minute for 50 minutes
|
||||
# Assert that the _next_fire_time does not change
|
||||
# until the _next_fire_time is reached
|
||||
for i in range(1, 50):
|
||||
eval_time = eval_time1 + datetime.timedelta(minutes=i)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 55, 0)
|
||||
|
||||
# Disable the job
|
||||
schedule.opts["schedule"]["enabled"] = False
|
||||
|
||||
for i in range(1, 10):
|
||||
eval_time = eval_time1 + datetime.timedelta(seconds=i)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 16, 55, 0)
|
||||
|
||||
eval_time = dateutil.parser.parse("11/29/2017 4:55pm")
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 17, 50, 0)
|
||||
|
||||
|
||||
def test_eval_disabled_hours(schedule):
|
||||
"""
|
||||
verify that scheduled job does not run
|
||||
"""
|
||||
|
||||
job_name = "test_eval_disabled_hours"
|
||||
job = {
|
||||
"schedule": {
|
||||
"enabled": True,
|
||||
job_name: {"function": "test.ping", "hours": "6"},
|
||||
}
|
||||
}
|
||||
|
||||
# Add the job to the scheduler
|
||||
schedule.opts.update(job)
|
||||
|
||||
eval_time1 = dateutil.parser.parse("11/29/2017 4:00pm")
|
||||
schedule.eval(now=eval_time1)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 22, 0, 0)
|
||||
|
||||
# Evaluate 1 hour for 5 hours
|
||||
# Assert that the _next_fire_time does not change
|
||||
# until the _next_fire_time is reached
|
||||
for i in range(1, 5):
|
||||
eval_time = eval_time1 + datetime.timedelta(hours=i)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 22, 0, 0)
|
||||
|
||||
# Disable the job
|
||||
schedule.opts["schedule"]["enabled"] = False
|
||||
|
||||
for i in range(1, 50):
|
||||
eval_time = eval_time1 + datetime.timedelta(minutes=i)
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 29, 22, 0, 0)
|
||||
|
||||
eval_time = dateutil.parser.parse("11/29/2017 10:00pm")
|
||||
schedule.eval(now=eval_time)
|
||||
ret = schedule.job_status(job_name)
|
||||
assert "_next_fire_time" in ret
|
||||
assert ret["_next_fire_time"] == datetime.datetime(2017, 11, 30, 4, 0, 0)
|
||||
|
||||
|
||||
def test_eval_global_disabled_job_enabled(schedule):
|
||||
"""
|
||||
verify that scheduled job does not run
|
||||
|
|
Loading…
Add table
Reference in a new issue