How to use Date, Time, and Timestamp without Facts in Ansible Playbook.
A quick and dirty workaround using the date
command-line utility.
I’m going to show you a live Playbook and some simple Ansible code.
I’m Luca Berton and welcome to today’s episode of Ansible Pilot.
Using Date, Time, and Timestamp without Facts in Ansible Playbook
Date and time
date +%Y-%m-%d@%H:%M:%S
ISO8601
date --iso-8601=seconds
date +%Y-%m-%dT%H:%M:%S%z
How to Use the Date, Time, and Timestamp in Ansible Playbook.
The ansible_data_time
fact is an amazing resource but sometimes you can’t have it or you don’t want to use the date and time of the remote host.
These solutions enable you to print the Date and Time and ISO8601 format. I ended up after carefully reading the date
man page.
Unfortunately not all the platforms support the --iso-8601
parameter so you need to build it manually the format by yourself (for example in macOS operating system).
Links
Playbook
Let’s jump into a quick live Playbook of Using Date, Time, and Timestamp in the Ansible Playbook.
I’m going to share with you how to display the full ansible_date_time
and the ISO8601 format.
code
---
- name: date and time Playbook
hosts: all
gather_facts: false
tasks:
- name: date and time
ansible.builtin.debug:
msg: "{{ lookup('pipe', 'date +%Y-%m-%d@$H:%M:%S') }}"
- name: iso8601 manual
ansible.builtin.debug:
msg: "{{ lookup('pipe', 'date +%Y-%m-%dT%H:%M:%S%z') }}"
- name: iso8601
ansible.builtin.debug:
msg: "{{ lookup('pipe', 'date --iso8601=seconds') }}"
ignore_errors: true
execution
$ ansible-playbook -i virtualmachines/demo/inventory variables/datetime_nofact.yml
PLAY [date and time Playbook] *************************************************************************
TASK [date and time] ******************************************************************************
ok: [demo.example.com] => {
"msg": "2022-05-22@:57:33"
}
TASK [iso8601 manual] *****************************************************************************
ok: [demo.example.com] => {
"msg": "2022-05-22T14:57:33+0200"
}
TASK [iso8601] ************************************************************************************
date: illegal option -- -
usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
fatal: [demo.example.com]: FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'pipe'. Error was a <class 'ansible.errors.AnsibleError'>, original message: lookup_plugin.pipe(date --iso8601=seconds) returned 1. lookup_plugin.pipe(date --iso8601=seconds) returned 1"}
...ignoring
PLAY RECAP ****************************************************************************************
demo.example.com : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
Conclusion
Now you know how to use the Date, Time and Timestamp without Ansible Facts in Ansible Playbook. Subscribe to the YouTube channel, Medium, and Website, X (formerly Twitter) to not miss the next episode of the Ansible Pilot.
Academy
Learn the Ansible automation technology with some real-life examples in my Udemy 300+ Lessons Video Course.
My book Ansible By Examples: 200+ Automation Examples For Linux and Windows System Administrator and DevOps
Donate
Want to keep this project going? Please donate