Ansible:如何检查shell命令中的文件是否已更改?
我有一个文件,由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
- 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