【问题标题】:Is there a way to run a role only if a tag is specified?有没有办法只在指定标签的情况下运行角色?
【发布时间】:2019-08-12 02:19:18
【问题描述】:

我被要求为预生产服务器和生产服务器编写两个角色,它们将安装一些程序(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,所以我必须为每个任务设置它,这不是我想要的。

还有其他可能吗?

提前谢谢你

【问题讨论】:

    标签: ansible roles


    【解决方案1】:

    是的,有可能import_role,或include_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
    

    【讨论】:

    • 那么,一旦将角色作为任务,我可以使用never 标签吗?
    • 是的。我也是这么理解Special Tags
    • 非常感谢,似乎工作得很好,我可以向比我更了解 Ansible 的人证明这一点,他似乎对这个解决方案没意见
    猜你喜欢
    • 2023-04-09
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多