了解剧本中的角色标签

时间:2018-06-21 19:28:47

标签: ansible

对于剧本中的角色标记是否正常工作以及如果存在的话,其理念感到困惑。

剧本

- 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>

1 个答案:

答案 0 :(得分:1)

  

这是预期的行为吗?

是的。

  

而且,有没有一种方法可以标记剧本中的角色(以及任务-include_role),从而仅根据执行时传递的标签过滤角色本身是否执行?

自Ansible 2.4版以来,使用角色的方式有三种:

使用import_roleroles声明,Ansible连接声明中指定的标签并执行任务。

include_role的工作原理类似于独立任务,即它本身观察标签。


注释

-相同的规则适用于when条件。

-在Ansible 2.4 include_role之前现在像import_role一样工作。

-参考Differences Between Static and Dynamic