我使用Ansible来pipe理节点,我想检查我的节点上的时区。
我发现在centos上,我应该根据/ usr / share / zoneinfo / {{timezone}}文件replace/ etc / localtime。
我在我的剧本中写下了这个任务:
- name: sync timezone file if different command: "rsync --itemize-changes --checksum --copy-links /usr/share/zoneinfo/{{ timezone }} /etc/localtime"
哪个工作。
我的目标是仅在必要时执行操作,所以在本地时间将仅在发生更改时才会写入。
但我的问题是,我也想用Ansible来检查我的节点上的任何更改。 而且,当执行一个命令时,即使没有改变,它总是在报告中被标记为“改变= 1”。
我尝试使用一个合理的文件模块,但不pipe是将本地或远程复制到远程,还是远程复制到远程。
我也尝试使用这个任务的注册选项检查:
- name: Copy timezone {{ timezone }} to /etc/localtime shell: "[[ $(md5sum /usr/share/zoneinfo/Europe/Paris | cut -d' ' -f1) = $(md5sum /etc/localtime | cut -d' ' -f1) ]]" register: timezone_check
但是,这是同样的问题,命令总是执行,所以改变是递增的。
任何想法如何我可以执行此?
可以覆盖更改的结果。
在你的情况下,你可以检查你的shell命令的结果,并根据需要覆盖已更改的状态。
覆盖更改结果的完整任务:
- name: Check timezone conf command: "rsync --itemize-changes --checksum --copy-links /usr/share/zoneinfo/{{ timezone }} /etc/localtime" register: timezone_check changed_when: "timezone_check.stdout.find('>') != -1" become: yes
为什么不直接创build符号链接?
- name: Set timezone file: src=/usr/share/zoneinfo/{{ timezone }} dest=/etc/localtime state=link