使用ansible对文件做sha1校验

使用ansible的过滤器完成的代码片:

file_list.yml

---
files:
  - name: /tmp/test/group
    checksum: 337ee88100ee84085665203d5198a50dd02321cf
  - name: /tmp/test/hosts
    checksum: 06964fa0fc063de59135e09a48eab879a5bdc068

checksum.yml

---
- hosts: localhost
  gather_facts: false
  vars_files:
    - file_list.yml
  tasks:
    - name: check file sum
      vars:
        - check1: "{{ item.checksum }}"
        - check2: "{{ lookup('file','{{ item.name }}') | hash('sha1') }}"
      assert:
        fail_msg: "Check fail! file: {{ item.name }}"
        success_msg: "Check success! file: {{ item.name }}"
        that:
          - check1 == check2
      loop: "{{ files }}"
      ignore_errors: true

但是运行后问题出现了,即使文件里存放的checksum值与sha1sum算出的值一致也判断为不相等,那么问题在于哪里呢。

经过排查发现,使用lookup的file提取出的文件由于包含换行(即“\n”),就会出现sha1匹配不成功的现象。

修改checksum.yml:

checksum.yml

- hosts: localhost
  gather_facts: false
  vars_files:
    - file_list.yml
  tasks:
    - name: save vars
      shell: "sha1sum {{ item.name }}"
      register: check2
      loop: "{{ files }}"
    - name: check sha1sum
      vars:
        - flag: [ 0 , 1 ]
        - check1: "{{ item.0.checksum }}"
      assert:
        fail_msg: "Check fail! file: {{ item.0.name }}"
        success_msg: "Check success! file: {{ item.0.name }}"
        that:
          - check1 == check2.result[item.1].stdout | regex_replace(' .*$')
      with_together:
        - "{{ files }}"
        - "{{ flag }}"
      ignore_errors: true

成功解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值