md5 - 是否有一种优雅的方法可以使用从服务器获取的 md5 文件在 ansible 中使用 md5 检查文件完整性?

标签 md5 ansible ansible-playbook integrity md5-file

我在服务器上有几个文件需要从 ansible playbook 下载,但因为连接很可能会中断,所以我想在下载后检查它们的完整性。

我正在考虑两种方法:

  • 将这些文件的 md5 作为变量存储在 ansible 中
  • 将这些文件的 md5 作为扩展名为 .md5 的文件存储在服务器上。这样的一对看起来像:file.extensionfile.extension.md5 .

  • 第一 方法引入了在 ansible 中维护 md5s 的开销。因此,每次有人添加新文件时,他都需要确保在正确的位置添加了 md5。

    但作为一个优势,有一个解决方案,使用来自 get_url 的内置检查。与 checksum=md5 一起行动.例如。:
    action: get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf checksum=md5:66dffb5228a211e61d6d7ef4a86f5758
    

    第二个方法更优雅,责任更窄。当有人在服务器上添加新文件时,他会确保添加 .md5同样,甚至不需要使用 ansible playbook。

    有没有办法使用checksum从文件匹配md5的方法?

    最佳答案

    如果您希望采用将校验和存储在服务器上的文件中的方法,您绝对可以使用 get_url 校验和 arg 来验证它。

    下载 .md5 文件并将其读入 var:

    - set_fact:
        md5_value: "{{ lookup('file', '/etc/myfile.md5') }}"
    

    然后当你下载文件时,将 md5_value 的内容传递给 get_url:
    - get_url:
        url: http://example.com
        dest: /my/dest/file
        checksum: "md5:{{ md5_value }}"
        force: true
    

    请注意,在 dest 中指定文件路径至关重要。 ;如果您将其设置为目录(并且在 url 中有一个文件名),则行为会发生显着变化。

    另请注意,您可能需要 force: true。这将导致每次运行时都会下载一个新文件。校验和仅在下载文件时触发。如果该文件已存在于您的主机上,则无需验证现有文件的总和,这可能是不可取的。

    为避免每次可以统计文件是否已存在时下载,请查看其总和是多少,并有条件地设置 force 参数。
    - stat:
        path: /my/dest/file
      register: existing_file
    
    - set_fact:
        force_new_download: "{{ existing_file.stat.md5 != md5_value }}"
      when: existing_file.stat.exists
    
    - get_url:
        url: http://example.com
        dest: /my/dest/file
        checksum: "md5:{{ md5_value }}"
        force:  "{{ force_new_download | default ('false') }}"
    

    此外,如果您从某种 Web 服务器中提取总和/工件,您实际上可以直接从 url 获取总和的值,而无需实际将文件下载到主机。这是一个使用 Nexus 服务器的示例,该服务器将托管工件及其总和:
    - set_fact:
        md5_value: "{{ item }}"
      with_url: http://my_nexus_server.com:8081/nexus/service/local/artifact/maven/content?g=log4j&a=log4j&v=1.2.9&r=central&e=jar.md5
    

    这可以用来代替使用 get_url 下载 md5 文件,然后使用查找从中读取。

    关于md5 - 是否有一种优雅的方法可以使用从服务器获取的 md5 文件在 ansible 中使用 md5 检查文件完整性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36448944/

    相关文章:

    c# - 在 Azure 上上传的 blob 的 MD5 哈希与本地计算机上的同一文件不匹配

    python - md5sum 输出和 Python hashlib 输出有什么区别?

    python - 使用模板构造md5哈希算法

    ansible - ansible处理程序发生错误后如何运行命令

    hash - MD5是128位但为什么是32个字符?

    amazon-ec2 - Ansible AWS EC2 安全组未更新

    kubernetes configmap 打印\n 而不是换行符

    ansible - 在`with_items`任务上使用`failed_when`,具体取决于返回码

    ansible - 使用 jinja 模板中的给定范围在 ansible 中创建 ip 列表

    ansible - .zshrc 没有在 Ansible 中加载?