【问题标题】:Ansible: How to Check a local and remote set of files for sha1 checksumAnsible:如何检查本地和远程文件集的 sha1 校验和
【发布时间】:2017-09-14 20:15:19
【问题描述】:

我希望能够根据本地目录中的文件列表进行校验和。然后能够获取这些文件的校验和并将其与远程系统上相同文件的校验和进行比较。

我知道我可以通过以下方式获得

# Local File
- stat:
   path: "{{ playbook_dir }}/roles/common/files/myfile.dat"
   checksum_algorithm: sha1
  delegate_to: localhost
  run_once: true
  register: localsha_result

# Remote file
- stat:
   path: "{{ rmt_dest_dir }}/myfile.dat"
   checksum_algorithm: sha1
  register: sha_result

我已经尝试遍历我想要校验和的文件:

# Gather Files
- name: gather names of files
  local_action: shell  ls {{ playbook_dir }}/roles/common/files/*.dat | awk -F '/' '{ print $NF }'
  register: datfiles

# Local File 
- stat:
   path: "{{ playbook_dir }}/roles/common/files/{{ item }}"
   checksum_algorithm: sha1
  with_items: "{{ datfiles.stdout_lines }}"
  delegate_to: localhost
  run_once: true
  register: localsha_result

# Remote file
- stat:
   path: "{{ rmt_dest_dir }}/{{ item }}"
   checksum_algorithm: sha1
  with_items: "{{ datfiles.stdout_lines }}"
  register: sha_result

- name: check sha1
  fail: msg="SHA1 checksum fails"
  when: not sha_result.stat.checksum is defined or not sha_result.stat.checksum == "{{ item.stat.checksum }}"
with_items: "{{ datfiles.stdout_lines}}"

【问题讨论】:

    标签: loops ansible checksum stat


    【解决方案1】:

    您只需执行两项任务即可:(1) 注册本地校验和,(2) 检查远程校验和,将其与相应的本地校验和进行比较:

    ---
    - hosts: test-server
      tasks:
        - stat:
            path: "{{ item }}"
            checksum_algorithm: sha1
          delegate_to: localhost
          with_fileglob: /tmp/*.dat
          register: local_files
        - stat:
            path: "/tmp/{{ item.stat.path | basename }}"
            checksum_algorithm: sha1
          failed_when: remote_files.stat.checksum != item.stat.checksum
          # failed_when condition checked after every iteration
          #   and remote_files here is a result of individual task
          #   but after loop is finished, remote_files is a cobination
          #   of all iterations results
          with_items: "{{ local_files.results }}"
          register: remote_files
          loop_control:
            label: "{{ item.stat.path | basename }}"
    

    【讨论】:

    • 这就像一个魅力! failed_when 非常有帮助。非常感谢!!
    猜你喜欢
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2018-09-07
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多