【问题标题】:Ansible breaks the loop when using includeAnsible 在使用 include 时会中断循环
【发布时间】:2020-06-24 18:17:52
【问题描述】:

我试图在一个循环中运行多个任务,但是每当我在循环内遇到错误时,ansible 就会退出它。 我希望能够运行循环,直到每个项目的列表结束。如果某个项目出现中断,则循环仅针对该项目停止,其余部分不停止。

我的库存结构是 json,但看起来像这样:

webhost1:
  items: 
      [item1, item2]

我的 ansible 剧本是这样做的:

  - include: multiple_tasks_to_be_run_for_each_item.yml
    with_items: items

预期的结果类似于运行:

  - shell: /bin/false
    with_items:
       - "1"
       - "2"
       - "3"

即使第一项失败,它也会继续运行。

【问题讨论】:

  • 我不想跳过失败的任务,只是跳过那个项目。之后 ansible 报告主机失败,所以我知道那里发生了一些事情。
  • 您好,根据网站,您应该表明您尝试了不同的解决方案,而不仅仅是寻求帮助。

标签: json loops ansible


【解决方案1】:

请尝试在 Ansible Role 中使用 loop、loop_control 和 loop_var,如果有帮助,请告诉我。

sample.yml
-----------
    - include_tasks: "repeat.yml"
      loop: "{{ list_of_values }}"
      loop_control:
        loop_var: var1


repeat.yml ( You can use the var1 inside the repeat.yml)
-----------

---
- name: Repeat Tasks
  block:
    - name : task 1
      .........

    - name : task 2
      .........

【讨论】:

  • 我认为 ansible 本身存在错误。 “使用 include* 语句的主要优点是循环。当循环与包含一起使用时,包含的任务或角色将为循环中的每个项目执行一次。” docs.ansible.com/ansible/latest/user_guide/… 我尝试使用角色,但它仍然不像简单的任务循环那样工作。我将在 ansible git 中提出一个错误,看看团队会回答什么。
【解决方案2】:

显然这是预期的行为。来自github issue here.的回答

这是按预期工作的。使用blockrescue 来控制故障。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2020-02-06
    • 2011-09-20
    • 1970-01-01
    相关资源
    最近更新 更多