小智..
19
如果您希望使用在服务器上的文件中存储校验和的方法,您肯定可以使用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.这将导致每次运行时都下载新文件.仅在下载文件时触发校验和.如果您的主机上已存在该文件,则无需验证现有文件的总和,这可能是不可取的.
为了避免每次你可以使用stat来查看文件是否已经存在,请查看其总和是什么,并有条件地设置force param.
- 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来读取它.