与 with_items 一起应用于 include 指令时忽略角色标签

Role tags ignored when applied on include directive alongside with_items

所以我遇到了一个奇怪的问题,ansible 无法在角色中执行一些标记的 include 任务。

经过一些挖掘,运行 指定任务的能力似乎在 includewith_items 相关联后立即中断。

例如我的简单角色包含:

role/tasks/main.yml
---
- include: test.yml
  tags:
    - my_role_test


role/tasks/test.yml
---
- debug:
    msg: "It works"

当我 运行 我的剧本 --tags=my_role_test 时,我可以看到预期的输出:

[20:18:52] test : debug | server | SUCCESS | 593ms
{
  - msg: It works
}

但是,如果我更改 main.yml 文件并将 with_items 添加到包含任务:

role/tasks/main.yml
---
- include: test.yml
  with_items:
    - A
    - B
  tags:
    - my_role_test

我得到了这个输出:

[20:15:41] test : include
[20:15:41]  ➥ system | included: /test/tasks/test.yml for server
[20:15:41]  ➥ system | included: /test/tasks/test.yml for server
[20:15:41]  ➥ system | -- Play recap --

并且任务没有被执行。

我做错了什么吗?这是一个可靠的问题吗?您知道解决方法吗?

我的ansible版本是2.5.2.

谢谢,

你的情况要问的主要问题是:

使用 Ansible 在循环中为每个项目设置标签。

看起来是个悬而未决的问题。 https://github.com/ansible/ansible/issues/19115

请检查: https://serverfault.com/questions/864638/ansible-set-tags-per-item-in-with-items-loop

所以,基本上,ansible changed the way to manage tags inheritance since Ansible 2.5。唯一的解决方案是将标签直接放在包含的任务文件的每个任务上,或者使用静态导入_*。请注意,对于动态包含,使用块部分可能会有所帮助:

role/tasks/main.yml
---
- include: test.yml
  with_items:
    - A
    - B


role/tasks/test.yml
---
block:
  - debug:
      msg: "It works"
  - debug:
      msg: "It works again"
tags:
  - my_role_test

按照 https://github.com/ansible/ansible/issues/19115 中的建议尝试 "include_tasks" 而不是 "include" “......这个问题在最近的 ansible 版本中得到了解决,但需要从 include 改为利用 include_tasks。” 详情可用 https://docs.ansible.com/ansible/2.5/porting_guides/porting_guide_2.5.html#dynamic-includes-and-attribute-inheritance