如果您希望采用在服务器上将校验和存储在文件中的方法,您可以使用get_url校验和参数来验证它。
下载.md5文件并将其读入变量中:
- 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
。这将导致每次运行时都会下载一个新文件。只有在下载文件时才会触发校验和。如果文件已经存在于您的主机上,它将不会验证现有文件的总和,这可能是不可取的。
为避免每次下载文件,您可以执行stat
以查看文件是否已经存在,查看其总和,并根据条件设置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文件,然后使用lookup从中读取内容。
delegate_to: 127.0.0.1
。 - Wangstat
时,还需要设置checksum_algorithm
,这是在 ansible.builtin 的 2.0 版本中添加的。 - Iron Bishopget_url
文档中写道:“如果校验和与目标校验和不相等,则删除目标文件。”因此,在没有其他人编写该文件的情况下,可以安全地使用它而无需force: true
。 - Petr