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

Ansible角色:实现应用启动重试与成功跳转运行逻辑

Ansible角色实现应用启动的重试与流程控制

需求说明

  • 启动应用最多重试3次,成功返回"OK",失败返回"NOK"
  • 每次启动失败(输出"NOK")时,必须删除xpto目录,最多尝试3次,3次失败则终止执行
  • 启动成功(输出"OK")则跳过目录删除,直接运行应用
  • 角色仅包含启动应用、删除目录、运行应用三个核心任务

现有代码(缺少重试与跳转逻辑)

---    
- name: Start app
  command: start app
  register: result
  tags: myrole

- name: Delete directory xpto if app didn't started ok
  command: rm -rf xpto
  when:
    - result.stdout is search("NOK")
  tags: myrole

- name: Run the application
  command: app run xpto
  when:
    - result.stdout is search("OK")
  tags: myrole

解决方案代码

以下实现完全满足需求,通过循环重试、状态标记实现每次失败后的目录清理,成功后直接跳转至运行应用任务:

---
- name: Initialize start success flag
  set_fact:
    start_success: false
  tags: myrole

- name: Attempt to start app with retries (max 3 times)
  block:
    - name: Start app
      command: start app
      register: start_result
      tags: myrole

    - name: Mark start as successful if output is "OK"
      set_fact:
        start_success: true
      when: start_result.stdout is search("OK")
      tags: myrole

    - name: Delete xpto directory on start failure
      command: rm -rf xpto
      when: start_result.stdout is search("NOK")
      tags: myrole
  # 重试终止条件:启动成功 或 已尝试3次
  until: start_success or ansible_loop.index == 3
  retries: 3
  delay: 2  # 可选,每次重试间隔2秒,可按需调整
  loop: "{{ range(3) | list }}"
  loop_control:
    extended: true
    loop_var: dummy
  tags: myrole

- name: Run the application if start succeeded
  command: app run xpto
  when: start_success
  tags: myrole

- name: Terminate execution if all attempts failed
  fail:
    msg: "Failed to start application after 3 attempts"
  when: not start_success
  tags: myrole

逻辑说明

  1. 状态初始化:用start_success变量记录启动状态,初始值为false
  2. 循环重试流程:通过block包裹三个核心任务,循环执行最多3次:
    • 启动应用后检查输出,若为"OK"则标记启动成功,终止循环
    • 若输出为"NOK",立即删除xpto目录,然后进入下一次重试
  3. 最终分支处理:
    • 启动成功则直接执行运行应用任务
    • 3次尝试均失败时,触发fail任务终止执行

内容的提问来源于stack exchange,提问作者fr0zt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:15:41