对于剧本中的角色标记是否正常工作以及如果存在的话,其理念感到困惑。
剧本
- hosts: Test-c7-1
roles:
- role: test.tag
tags: tag2
角色/任务
---
- debug:
msg: "task - tag1 set"
tags: tag1
- debug:
msg: "task - tag2 set"
tags: tag2
- debug:
msg: "task - always set"
tags: always
- debug:
msg: "task - NO TAG"
传入匹配的标记后,角色将运行,并且无论标记如何,任务列表中的所有内容都会执行。
匹配标记:
ansible-playbook playbook/tagtester.yml --tags "tag2"
PLAY [Test-c7-1] ********************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [Test-c7-1]
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - tag1 set"
}
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - tag2 set"
}
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - always set"
}
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - NO TAG"
}
PLAY RECAP **************************************************************************************************************************************************************************
Test-c7-1 : ok=5 changed=0 unreachable=0 failed=0
当传递不匹配的标记时,角色仍将运行,但(不匹配)标记将传递给任务,并且仅执行带有该标记(或标记为“始终”)的任务。 / p>
不匹配的标签:
ansible-playbook playbook/tagtester.yml --tags "tag1"
PLAY [Test-c7-1] ********************************************************************************************************************************************************************
TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [Test-c7-1]
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - tag1 set"
}
TASK [test.tag : debug] *************************************************************************************************************************************************************
ok: [Test-c7-1] => {
"msg": "task - always set"
}
PLAY RECAP **************************************************************************************************************************************************************************
Test-c7-1 : ok=3 changed=0 unreachable=0 failed=0
这是预期的行为吗?
而且,是否有一种方法可以标记剧本中的角色(以及任务-include_role),以仅根据执行时传递的标记来过滤是否执行该角色本身? / p>
答案 0 :(得分:1)
这是预期的行为吗?
是的。
而且,有没有一种方法可以标记剧本中的角色(以及任务-include_role),从而仅根据执行时传递的标签过滤角色本身是否执行?
自Ansible 2.4版以来,使用角色的方式有三种:
使用import_role
和roles
声明,Ansible连接声明中指定的标签并执行任务。
include_role
的工作原理类似于独立任务,即它本身观察标签。
注释
-相同的规则适用于when
条件。
-在Ansible 2.4 include_role
之前现在像import_role
一样工作。