2017-04-18 78 views
-1

我希望能夠根據本地目錄中的文件列表執行校驗和。然後能夠獲得這些文件校驗和並將其與遠程系統上相同文件的校驗和進行比較。Ansable:如何檢查sha1校驗和的本地和遠程文件集

我知道我可以用下面的

# 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}}" 

回答

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 }}" 
+0

這工作就像魅力! 'failed_when'是非常有幫助的。 非常感謝你! – Cale