Ansible 剧本从纯文本文件和日志文件校验和中读取变量

Ansible 剧本从纯文本文件和日志文件校验和中读取变量

在学习 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

谢谢

相关内容