如何仅运行 Ansible 剧本中的一个角色?

问题描述 投票:0回答:2

我有一个 site.yml,它导入了几个剧本。

- import_playbook: webservers.yml
- ....

每个剧本都“调用”多个角色:

- name: apply the webserver configuration 
  hosts: webservers

  roles:
  - javajdk
  - tomcat
  - apache

如何才能只运行javajdk角色?

这将运行所有角色......

ansible-playbook -i inventory  webservers.yml

我知道有标签,但一般如何将它们分配给角色?

ansible ansible-2.x ansible-role
2个回答
22
投票

标签是自然的选择。为以下角色指定它们的三种方法:

- name: apply the webserver configuration 
  hosts: webservers

  roles:
    - role: javajdk
      tags: java_tag
    - { role: tomcat,  tags: tomcat_tag }

  tasks:
    - include_role:
        name: apache
      tags: apache_tag

您可以明确指定要运行的标签:

ansible-playbook example.yml --tags "java_tag"

参考文档


0
投票

回答你的问题“我怎样才能只运行javajdk角色?”,你可以这样做,从Ansible 2.7开始,根据这个答案

ansible -i inventory all --module-name import_role --args name=javajdk

细分:

  • -i
    指定库存,例如
    production.yml
  • all
    是模式,即要匹配的主机。这里的模式是
    all
    组 - 在清单中的所有主机上运行角色
  • --module-name import_role
    ,这是关键:运行 import_role 模块。这引入了戏剧中的角色,例如Ansible 的当前执行情况
  • --args name=javajdk
    :传递你要执行的角色名称,这里
    javajdk

重要提示:格式不符合您通常的剧本调用。

对于多个角色,对于每个角色,您需要使用单个角色名称运行命令,从今天开始(Ansible 2.16),

ansible
仅接受单个
--module-name
并且
import_role
仅接受单个角色名称。 .. 但此时您最好为其编写一本快速手册。

对于另一个问题,“我知道有标签,但一般如何将它们分配给角色?”,请检查@techraf的答案

© www.soinside.com 2019 - 2024. All rights reserved.