06/02/2017

Mimic "now + time" in schedule state - SaltStack

SaltStack has a schedule state that allows you to manage scheduled jobs on client (Minion), and it's very handy to manage cron style job.

But sometimes you could need to run a job once, in other words, like "at" command not like a cronjob.

OK! There is good news and there is bad news :D
The good news is that SaltStack schedule state supports "run once", so a job can be run just for one time.

The bad news is that to do that you need to specify the date explicitly in ISO 8601 date format by default (but you can change it), e.g. "2017-02-05T19:00:00".
i.e. it doesn't support the style of "at" command like "now +1 min".

I couldn't found any standard way to do that, but I found a workaround using Jinja2 filters to achieve that goal.
It simply generates "now" based on Unix Time, then it add x number of minutes, finally it converts that to ISO8601 time.

(None|strftime("%s")|int + 1)|strftime("%Y-%m-%dT%H:%M:%S")

So let's see that in action, this a dummy example how to run ping job after 1 minute from now.

{% set timer = cfg.get('timer', 1)|int %}

an_arbitrary_job:
  schedule.present:
    - function: test.ping
    - once: "{{ (None|strftime("%s")|int + timer)|strftime("%Y-%m-%dT%H:%M:%S") }}"
    - once_fmt: "%Y-%m-%dT%H:%M:%S"
    - persist: False

The "at" state or "at" module could be used to, but that totally depends on what you need to do. For example you can run other states from schedule state but just system commands from "at" state/module.

Powered by Blogger.

Hello, my name is Ahmed AbouZaid, I'm a passionate Tech Lead DevOps Engineer. 👋

I specialize in Cloud-Native and Kubernetes. I'm also a Free/Open source geek and book author. My favorite topics are DevOps transformation, DevSecOps, automation, data, and metrics.

More about me ➡️

Contact Me

Name

Email *

Message *

Start Your DevOps Engineer Journey!

Start Your DevOps Engineer Journey!
Start your DevOps career for free the Agile way in 2024 with the Dynamic DevOps Roadmap ⭐

Latest Post

Bootstrap Cloud-Native bootstrappers like Crossplane with K3d - Automation

I created a logo for the Crossplane Bootstrapper because all good projects deserve a logo. 😁 TL;DR ...

Popular Posts

Blog Archive