You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:48:20