# at - specific time & date

**URL:** <https://forum.ansible.com/t/at-specific-time-date/37454>\
**Category:** Ansible Project\
**Created:** [December 12, 2022, 2:30pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454 "2022-12-12T14:30:07Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![dulhaver](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/dulhaver/32/1061_2.png) [@dulhaver](https://forum.ansible.com/u/dulhaver)\
**Post date:** [December 12, 2022, 2:30pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/1 "2022-12-12T14:30:07Z")

</div>

I want to automate a list of command exections with at.

Looking at the at modules documentation I see only unit & count for specify the time and date. That looks a litte unprecise to me.

What is the concepts here to specify something like '16:00 2023-01-19'?

---

<div class="post-metadata">

**Author:** ![Andrew\_Latham](https://avatars.discourse-cdn.com/v4/letter/a/ed8c4c/32.png) [@Andrew\_Latham](https://forum.ansible.com/u/Andrew_Latham)\
**Post date:** [December 12, 2022, 2:59pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/2 "2022-12-12T14:59:26Z")

</div>

So you are using [ansible.posix.at](http://ansible.posix.at)?

That plugin uses a file to run AT as seen at [https://github.com/ansible-collections/ansible.posix/blob/main/plugins/modules/at.py#L82](https://github.com/ansible-collections/ansible.posix/blob/main/plugins/modules/at.py#L82)

So in the code it uses the `now +` method. This may be a situation where a command/shell call would be the solution.

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [December 12, 2022, 4:37pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/3 "2022-12-12T16:37:18Z")

</div>

> I want to automate a list of command exections with at.  
> What is the concepts here to specify something like '16:00 2023-01-19'?

For example, to schedule a command at "2022-12-12 17:30:00" declare  
the variables

&nbsp;&nbsp;&nbsp;&nbsp;now\_datetime: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_datetime: "2022-12-12 17:30:00"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_seconds: "{{ ((at\_datetime|to\_datetime) -  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(now\_datetime|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to\_datetime('%Y-%m-%d %H:%M:%S'))).seconds }}"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_minutes: "{{ (at\_seconds|int / 60)|int + 1 }}"

gives

&nbsp;&nbsp;&nbsp;&nbsp;now\_datetime: 2022-12-12 17:26:23  
&nbsp;&nbsp;&nbsp;&nbsp;at\_datetime: 2022-12-12 17:30:00  
&nbsp;&nbsp;&nbsp;&nbsp;at\_seconds: 217  
&nbsp;&nbsp;&nbsp;&nbsp;at\_minutes: 4

Use the variable \*at\_minutes\*

&nbsp;&nbsp;&nbsp;&nbsp;- ansible.posix.at:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: date \> /tmp/test\_at  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count: "{{ at\_minutes }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;units: minutes  
&nbsp;&nbsp;&nbsp;&nbsp;- command: at -l  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register: out  
&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var: out.stdout

will display the queue

&nbsp;&nbsp;out.stdout: "5\tMon Dec 12 17:30:00 2022 a admin"

The command executed as expected

> cat /tmp/test\_at

Mon 12 Dec 2022 05:30:00 PM CET

Example of a complete playbook for testing

- hosts: localhost

&nbsp;&nbsp;vars:

&nbsp;&nbsp;&nbsp;&nbsp;now\_datetime: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_datetime: "2022-12-12 17:30:00"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_seconds: "{{ ((at\_datetime|to\_datetime) -  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(now\_datetime|  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to\_datetime('%Y-%m-%d %H:%M:%S'))).seconds }}"  
&nbsp;&nbsp;&nbsp;&nbsp;at\_minutes: "{{ (at\_seconds|int /  
&nbsp;&nbsp;&nbsp;&nbsp;60)|int + 1 }}"

&nbsp;&nbsp;tasks:

&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg: |  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;now\_datetime: {{ now\_datetime }}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at\_datetime: {{ at\_datetime }}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at\_seconds: {{ at\_seconds }}  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at\_minutes: {{ at\_minutes }}

&nbsp;&nbsp;&nbsp;&nbsp;- ansible.posix.at:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: date \> /tmp/test\_at  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count: "{{ at\_minutes }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;units: minutes

&nbsp;&nbsp;&nbsp;&nbsp;- command: at -l  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register: out

&nbsp;&nbsp;&nbsp;&nbsp;- debug:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var: out.stdout

---

<div class="post-metadata">

**Author:** ![dulhaver](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/dulhaver/32/1061_2.png) [@dulhaver](https://forum.ansible.com/u/dulhaver)\
**Post date:** [December 13, 2022, 8:23am UTC](https://forum.ansible.com/t/at-specific-time-date/37454/4 "2022-12-13T08:23:40Z")

</div>

thx that really works. It is not really user-friendly though.

Apparently I am not the only one thinking this should be easier, so there is an issue for adding a more intuitive way to specify time and date [https://github.com/ansible-collections/ansible.posix/issues/326](https://github.com/ansible-collections/ansible.posix/issues/326)

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [December 13, 2022, 10:03am UTC](https://forum.ansible.com/t/at-specific-time-date/37454/5 "2022-12-13T10:03:00Z")

</div>

> thx that really works. It is not really user-friendly though.
> 
> Apparently I am not the only one thinking this should be easier, so there is an issue for adding a more intuitive way to specify time and date [https://github.com/ansible-collections/ansible.posix/issues/326](https://github.com/ansible-collections/ansible.posix/issues/326)

> \> now\_datetime: "{{ '%Y-%m-%d %H:%M:%S'|strftime }}"  
> \> at\_datetime: "2022-12-12 17:30:00"  
> \> at\_seconds: "{{ ((at\_datetime|to\_datetime) -  
> \> (now\_datetime|to\_datetime)).seconds }}"  
> \> at\_minutes: "{{ (at\_seconds|int / 60)|int + 1 }}"  
> \>  
> \> - ansible.posix.at:  
> \> command: date \> /tmp/test\_at  
> \> count: "{{ at\_minutes }}"  
> \> units: minutes

Yes, it's rather awkward. I simplified the declaration of  
\*at\_seconds\*. It might be a good idea to have a conversion function  
for this, e.g.

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- ansible.posix.at:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command: date \> /tmp/test\_at  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count: "{{ at\_datetime|at\_minutes }}"  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;units: minutes  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vars:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at\_datetime: "2022-12-12 17:30:00"  
&nbsp;&nbsp;  
Try

> cat plugins/filter/at\_minutes.py

from datetime import datetime

def at\_minutes(at\_datetime):  
&nbsp;&nbsp;&nbsp;&nbsp;timesince = datetime.fromisoformat(at\_datetime) - datetime.now()  
&nbsp;&nbsp;&nbsp;&nbsp;return int(timesince.total\_seconds() / 60 + 1)

class FilterModule(object):

&nbsp;&nbsp;&nbsp;&nbsp;def filters(self):  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return {  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'at\_minutes': at\_minutes,  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

---

<div class="post-metadata">

**Author:** ![dulhaver](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/dulhaver/32/1061_2.png) [@dulhaver](https://forum.ansible.com/u/dulhaver)\
**Post date:** [December 13, 2022, 11:49am UTC](https://forum.ansible.com/t/at-specific-time-date/37454/6 "2022-12-13T11:49:14Z")

</div>

That works! Even with looping

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [December 13, 2022, 12:20pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/7 "2022-12-13T12:20:00Z")

</div>

> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count: "{{ at\_datetime|at\_minutes }}"  
> ...  
> would it be worth a PR on the issue or is this too quick'n'dirty?

It's quick'n'clean I'd say 🙂

Yes, it's worth PR. I'll write tests for this. The question is which  
collection?

---

<div class="post-metadata">

**Author:** ![dulhaver](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/dulhaver/32/1061_2.png) [@dulhaver](https://forum.ansible.com/u/dulhaver)\
**Post date:** [December 13, 2022, 2:15pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/8 "2022-12-13T14:15:06Z")

</div>

> Yes, it's worth PR. I'll write tests for this. The question is which  
> collection?

honestly, I am still not really 100% sure what the term 'collection' actually means in the Ansible context and how things are organized. The issue, however, lives in ansible-collection/ansible.posix. Isn't that hint enough?

---

<div class="post-metadata">

**Author:** ![vbotka](https://sea1.discourse-cdn.com/ansible/user_avatar/forum.ansible.com/vbotka/32/359_2.png) [@vbotka](https://forum.ansible.com/u/vbotka)\
**Post date:** [December 13, 2022, 2:56pm UTC](https://forum.ansible.com/t/at-specific-time-date/37454/9 "2022-12-13T14:56:43Z")

</div>

I'm not sure if this kind of datetime conversion belongs to POSIX.

To learn about collections see [https://github.com/ansible-collections](https://github.com/ansible-collections)

For example, Ansible.Posix, where the module ansible.posix.at comes  
from, is "Ansible Collection targeting POSIX and POSIX-ish platforms."  
[https://docs.ansible.com/ansible/latest/collections/ansible/posix/index.html](https://docs.ansible.com/ansible/latest/collections/ansible/posix/index.html)
