仅当主机名包含字符串时才运行Ansible任务

时间:2015-05-29 15:23:39

标签: ansible

我在角色中有多个任务,如下所示。我不想创建另一个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

2 个答案:

答案 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'

因此,如果该组没有带有该子字符串的主机,则列表为空,这意味着错误的条件。