我有三套服务器。根据主机名,我希望客户端获取正确的文件。我在一台服务器上测试了剧本,其中包含" batch"但它会选择文件group_vars/perl
和group_vars/batch
pre_tasks:
- include_vars: group_vars/web
when: "'web' in ansible_hostname"
- include_vars: group_vars/batch
when: "'web' not in ansible_hostname"
- include_vars: group_vars/perl
when: "'web' not in ansible_hostname" or "'batch' not in ansible_hostname"
答案 0 :(得分:2)
Ansible将为您处理group_vars。对于群组web
中的所有主机,将自动包含group_vars/web
(或group_vars/web.yml
)的变种。请参阅Ansible文档中的Splitting Out Host and Group Specific Data。
要回答有关条件变量包含的问题,您提供的示例是正确的语法。这是另一个例子,不使用group_vars:
- include_vars: vars/{{ ansible_distribution}}_packages.yml
when: install_extra_packages is defined and
install_extra_packages != ''
请注意include_vars
接受表达式,因此您可以使用变量来确定要动态引入的vars文件。