Ansible中MD5验证失败时如何重新执行获取MD5的任务
解决方案:将获取与验证任务绑定循环
要实现每次验证失败时重新计算MD5校验和,你需要把「获取MD5」和「验证MD5」两个任务绑定在一起,让它们作为一个整体循环执行,而非仅单独循环验证步骤。
实现方式:使用block结合循环控制
通过block将两个任务包裹,给block添加until条件,这样每次循环都会重新执行「获取MD5」任务,再进行验证:
--- - name: 循环获取并验证MD5校验和 block: - name: Get md5 net_command: commands: - "bash md5sum {{ image }}" register: md5_remote - name: Verify md5 assert: that: - md5_local in md5_remote.stdout[0] register: md5_result until: md5_result is not failed retries: 5 delay: 60
逻辑说明
block将「获取MD5」和「验证MD5」打包成一个执行单元- 每次循环时,都会先重新执行
Get md5任务,刷新md5_remote变量的内容 - 随后执行
Verify md5进行断言检查,将结果存入md5_result - 当
md5_result不再失败时终止循环;否则等待60秒后重试,最多重试5次
替代方案:使用外部任务文件
如果任务逻辑更复杂,可将获取和验证的任务放到单独文件(比如check_md5.yml),再通过include_tasks循环调用:
check_md5.yml内容:
--- - name: Get md5 net_command: commands: - "bash md5sum {{ image }}" register: md5_remote - name: Verify md5 assert: that: - md5_local in md5_remote.stdout[0] register: md5_result
主任务文件中调用:
--- - name: 循环执行MD5检查任务 include_tasks: check_md5.yml register: md5_result until: md5_result is not failed retries: 5 delay: 60
这两种方式都能确保每次验证失败时,重新计算远程设备上的MD5校验和,直到匹配预期值或达到重试上限。
内容的提问来源于stack exchange,提问作者Dave0
相关产品推荐
相关产品推荐

