Ansible:如何检查shell命令中的文件?

问题描述 投票:5回答:2

我有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

如何检查文件是否已更改?

ansible
2个回答
6
投票
- stat: path=/etc/swift/account.ring.gz get_md5=yes
  register: before

- name: write account.ring.gz file
  shell: swift-ring-builder account.builder write_ring # update account.ring.gz
    chdir=/etc/swift
  changed_when: False # without this, as long as swift-ring-builder exits with
                      # return code 0 this task would always be reported as changed

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

- debug: msg='report this task as "changed" if file changed'
  changed_when: "'{{before.stat.md5}}' != '{{after.stat.md5}}'"

- debug: msg='execute this task if file changed'
  when: "'{{before.stat.md5}}' != '{{after.stat.md5}}'"

如果你真正想要的是根据swift-ring-builder的结果报告任务'write account.ring.gz文件'已更改或未更改,那么你必须运行一个迷你shell脚本。像这样的东西(未经测试):

- 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

或者如果我正确记住了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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.