Ansible:如何检查shell命令中的文件是否已更改?

Ansible:如何检查shell命令中的文件是否已更改?,ansible,Ansible,我有一个文件,由shell命令生成 - stat: path=/etc/swift/account.ring.gz get_md5=yes register: account_builder_stat - name: write account.ring.gz file shell: swift-ring-builder account.builder write_ring <--- rewrite account.ring.gz chdir=/etc/swift c

我有一个文件,由shell命令生成

- stat: path=/etc/swift/account.ring.gz get_md5=yes
  register: account_builder_stat

- name: write account.ring.gz file
  shell: swift-ring-builder account.builder write_ring <--- rewrite account.ring.gz
    chdir=/etc/swift
  changed_when: ??? account_builder_stat.changed ??? <-- no give desired effect
-stat:path=/etc/swift/account.ring.gz get\u md5=yes
注册:帐户\建设者\统计
-名称:write account.ring.gz文件
shell:swift ring builder account.builder write\u ring
如果您真正想要的是根据
swift ring builder
的结果将任务“write account.ring.gz file”报告为已更改或未更改,那么您必须运行一个迷你shell脚本。类似于此(未经测试):

或者如果我正确地记住了md5sum选项:

- name: write account.ring.gz file
  shell: echo `md5sum account.ring.gz` account.ring.gz > /tmp/ff; swift-ring-builder account.builder write_ring; md5sum -c /tmp/ff
    chdir=/etc/swift

按照@Kashyap的回答,您也可以在两个文件之间进行差异,但如果两个文件不同,差异将导致错误,并将停止playbook的运行。

??您是否在某些变量中包含旧md5?你能发布改变文件的任务吗?@kashyap variable account\u builder\u stat包含旧md5。使用shell命令更改文件上述代码如果要避免停止playbook的运行,您还可以将
忽略\u错误设置为
,但如果差异是一个显示停止,则停止是一个好主意。
当:thistTask.rc不在[0,1]中时失败。
忽略\u错误:是
(在任务上注册:此任务
)请参阅,如果要以ansible方式获得差异输出,请参阅
- name: write account.ring.gz file
  shell: bfr=`md5sum account.ring.gz`; swift-ring-builder account.builder write_ring; aftr=`md5sum account.ring.gz`; test $bfr -eq $aftr
    chdir=/etc/swift
- name: write account.ring.gz file
  shell: echo `md5sum account.ring.gz` account.ring.gz > /tmp/ff; swift-ring-builder account.builder write_ring; md5sum -c /tmp/ff
    chdir=/etc/swift