如何检查两个文件是否在相同的主机上完全相同?

我使用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