我有一个 site.yml,它导入了几个剧本。
- import_playbook: webservers.yml
- ....
每个剧本都“调用”多个角色:
- name: apply the webserver configuration
hosts: webservers
roles:
- javajdk
- tomcat
- apache
如何才能只运行javajdk角色?
这将运行所有角色......
ansible-playbook -i inventory webservers.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"
回答你的问题“我怎样才能只运行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的答案