在学习 ansible 的过程中,我尝试创建一个剧本,在某些电子邮件主机上运行,以收集文件的 sha1 哈希值。我有一个纯文本文件,其中包含剧本需要检查的路径和文件名。
其格式如下:files2.txt:
/opt/zimbra/zimlets-deployed/com_zextras_drive_open/assets/refresh.png
/opt/zimbra/zimlets-deployed/com_zextras_drive_open/assets/icon.png
/opt/zimbra/zimlets-deployed/com_zextras_drive_open/assets/sad-face.png
/opt/zimbra/zimlets-deployed/com_zextras_drive_open/com_zextras_drive_open.properties
/opt/zimbra/zimlets-deployed/com_zextras_drive_open/ZimbraDrive.template.js
现在我思考我需要使用类似以下的查找指令:
---
- hosts: localhost
gather_facts: no
vars:
contents: "{{ lookup('file', '/home/ansible/ansible/files2.txt') }}"
如果我这样做 - 调试:msg="zcs-files 的值是 {{ content }}"
我看到了内容。如何过滤掉这些内容,只留下文件名和校验和?
我也思考我需要使用 stat 来获取当前文件哈希值,并循环遍历上面的文件。
我使用此剧本的目标是收集上面的 files2.txt 文件中指定的文件的 sha1 校验和,然后记录匹配的哈希值,并将不匹配的文件哈希值记录到本地控制节点。
任何指导都将不胜感激。这是我目前所拥有的,但我不知道其中是否正确。
---
- hosts: mail
become: true
vars_files:
- files.yml
tasks:
- name: Use sha1 to calculate checksum
stat:
path: "{{ item.name }}"
checksum_algorithm: sha1
get_checksum: yes
register: sha
loop: "{{ files }}"
- set_fact:
path_hash: "{{ dict(_path|zip(_hash)) }}"
vars:
_path: "{{ hash_check.results|map(attribute='stat.path')|list }}"
_hash: "{{ hash_check.results|map(attribute='stat.checksum')|list }}"
我知道我可能对此有很大的误解,但我正在努力学习。
谢谢
答案1
为一个files.list
有内容
1.file
2.file
3.file
最小示例剧本
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Calculate SHA1 checksum
stat:
path: "{{ item }}"
checksum_algorithm: sha1
get_checksum: yes
register: sha
loop: "{{ lookup('file', 'files.list').splitlines() }}"
- debug:
msg: "{{ dict(_path | zip(_hash)) }}"
vars:
_path: "{{ sha.results | map(attribute='stat.path') | list }}"
_hash: "{{ sha.results | map(attribute='stat.checksum') | list }}"
将导致输出
TASK [Calculate SHA1 checksum] ****************************************************
ok: [localhost] => (item=1.file)
ok: [localhost] => (item=2.file)
ok: [localhost] => (item=3.file)
TASK [debug] ***************************************
ok: [localhost] =>
msg:
1.file: e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e
2.file: 7448d8798a4380162d4b56f9b452e2f6f9e24e7a
3.file: a3db5c13ff90a36963278c6a39e4ee3c22e2a436
谢谢