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

如何只运行Ansible剧本中的一个角色?,ansible,ansible-2.x,ansible-role,Ansible,Ansible 2.x,Ansible Role,我有一个site.yml,它导入了几个剧本 - import_playbook: webservers.yml - .... 每个剧本“调用”几个角色: - name: apply the webserver configuration hosts: webservers roles: - javajdk - tomcat - apache 如何仅运行javajdk角色? 这将运行所有角色。。。 ansible playbook-i目录Web服务器.yml 我知道有标

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

- import_playbook: webservers.yml
- ....
每个剧本“调用”几个角色:

- name: apply the webserver configuration 
  hosts: webservers

  roles:
  - javajdk
  - tomcat
  - apache
如何仅运行javajdk角色?

这将运行所有角色。。。
ansible playbook-i目录Web服务器.yml


我知道有标签,但通常我如何将它们分配给某个角色?

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

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

这将在任务级别定义标记、细化内容或在使用角色的位置定义标记,但通常不会将标记分配给角色。如果该角色在其他剧本中使用,则该角色将不具有标签。当然,这是两种不同的方法,只是希望genearl方法也有可能。坦率地说,我不知道你想在评论中说什么。很抱歉我不清楚,坦白地说,我会再试一次。当我看上面的例子时,你的答案很好。现在后退一步,想象第二个剧本也使用了-role:javajdk(无标记),因为第二个剧本在逻辑上不会使用标记过滤器现在的问题是,是否可以将标记分配给角色(仅一次,一个位置),以便对标记进行筛选。唯一的好处是避免每次使用角色时都给它分配标签。我现在明白你的意思了。幸运的是(!)你不容易做到。举个例子,说明如何使用标签运行
ansible playbook
,这将是一个更好的答案。