与 with_items 一起应用于 include 指令时忽略角色标签
Role tags ignored when applied on include directive alongside with_items
所以我遇到了一个奇怪的问题,ansible 无法在角色中执行一些标记的 include
任务。
经过一些挖掘,运行 指定任务的能力似乎在 include
与 with_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
所以我遇到了一个奇怪的问题,ansible 无法在角色中执行一些标记的 include
任务。
经过一些挖掘,运行 指定任务的能力似乎在 include
与 with_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