只有指定标签,才可以运行角色吗?

时间:2019-03-21 09:02:17

标签: ansible roles

我被要求为预生产和生产服务器编写两个角色,该角色将安装一些程序(Memcached,其PHP扩展等),并进行配置。

好吧,昨天,我有些混乱了,因为还使用了另外两个角色,而我的角色还没有完全完成。昨天,我们团队正在研究的项目已经投入生产。在所有这些角色上运行该剧本,并包含所有角色,并且它也开始运行我的角色。幸运的是,我的团队负责人准时看到了它,并从剧本中删除了我的角色。

这是我在剧本中被删除前的角色的样子

- hosts: was
  roles:
    - { role: cron, become: yes, tags: [ was, cron ] }
    - { role: app, when: type == 'master', become: yes, become_user: "{{become_user}}", become_flags: '-i', tags: [ was ] }
    - { role: memcacheExtension, become: yes, become_user: ansible, tags: ['memcache'] }
    - { role: gitlabRunner, become: yes, become_user: "{{become_user}}", tags: ['gitlab'] }

我的角色是最后两个。我以为使用此配置,只有当命令运行时使用的是我设置的标签之一,它们才会被触发。剧透:我错了。

我听说过'never'标记,但是它仅在tasks内有效,因此我必须为每个任务设置它,这不是我想要的。< / p>

还有其他可能性吗?

提前谢谢

1 个答案:

答案 0 :(得分:2)

是的,有可能import_roleinclude_role这是一项任务,可以加标签。

- hosts: was
  roles:
    - { role: cron, become: yes, tags: [ was, cron ] }
    - { role: app, when: type == 'master', become: yes, become_user: "{{become_user}}", become_flags: '-i', tags: [ was ] }
  tasks:
    - import_role:
        name: memcacheExtension
      become: yes
      become_user: ansible
      tags: memcache
    - import_role:
        name: gitlabRunner
      become: yes
      become_user: "{{become_user}}"
      tags: gitlab