如果您希望使用将校验和存储在服务器上的文件中的方法,您绝对可以使用 get_url 校验和参数来验证它。
下载 .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。这将导致每次运行时都会下载一个新文件。校验和仅在文件下载时触发。如果文件已经存在于您的主机上,则无需验证现有文件的总和,这可能是不可取的。
为了避免每次您可以统计查看文件是否已存在时下载,查看其总和是多少,并有条件地设置强制参数。
- 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 文件,然后使用查找来读取它。