我在角色中有多个任务,如下所示。我不想创建另一个yml
文件来处理此任务。我已经为Web服务器提供了一个包含,但是我们的一些Perl服务器需要安装一些Web包。
- name: Install Perl Modules
command: <command>
with_dict: perl_modules
- name: Install PHP Modules
command: <command>
with_dict: php_modules
when: <Install php modules only if hostname contains the word "batch">
主机库存文件
[webs]
web01
web02
web03
[perl]
perl01
perl02
perl03
perl-batch01
perl-batch02
答案 0 :(得分:42)
下面应该做的诀窍:
- name: Install PHP Modules
command: <command>
with_dict: php_modules
when: "'batch' in inventory_hostname"
请注意,在Playbook运行期间,您将有几个跳过的主机。
inventory_hostname
是Ansible的“神奇”变量之一:
此外,inventory_hostname是主机名的名称 在Ansible的库存主机文件中配置。这可能很有用 当你不想依赖发现的主机名时 ansible_hostname或其他神秘的原因。如果你有一个很长的 FQDN,inventory_hostname_short还包含第一个部分 期间,没有其余的域名。
来源:Ansible Docs - Magic variables and how to access information about other hosts
答案 1 :(得分:1)
您甚至可以为特定组(而不是整个清单)的主机筛选任务。
以下条件将执行您的任务-仅在清单组[perl] 具有主机名(包括子字符串“批处理” )时,< / p>
'nav.Reset Password'
因此,如果该组没有带有该子字符串的主机,则列表为空,这意味着错误的条件。