Having to check ntp configuration on a distributed cluster, I had to parse the “`timedatectl“` output into a dict and apply various checks.
I did this via the (infamous) ;) jinja templates|pipelines.
# This is the check_time.yml playbook. - name: Register the timedatectl output even in check mode. This command doesn't modify server configuration. shell: "timedatectl | grep ': '" check_mode: no register: timedatectl_output # Note that: # - to use timedatectl_output into with_items we need to QUOTE-AND-BRACE it # - we can default the previously indefined timedatectl_status dictionary via # variable | default(VALUE) # - - name: Process timedatectl_output lines one at a time and update repeatedly the timedatectl_status variable using combine(). set_fact: timedatectl_status: > {{ timedatectl_status | default({}) | combine( dict([ item.partition(': ')[::2]|map('trim') ]) ) }} with_items: "{{timedatectl_output.stdout_lines}}"
Now we can check ;)
- name: Clock synchronized fail: msg="Clock unsynchronized {{timedatectl_status}}" when: "{{timedatectl_status['NTP synchronized'] == 'no' }}" - name: All hw clocks are utc fail: msg="hwclock not utc {{timedatectl_status}}" when: "{{timedatectl_status['RTC in local TZ'] == 'no' }}"