2015-10-02 2 views
3

У меня есть три набора серверов. В зависимости от имени хоста, я хочу, чтобы клиент захватил правильный файл. Я тестировал пьесы на сервере со словом «пакетным», но он поднимает оба файл group_vars/perl и group_vars/batchAnsible: Как я могу включить переменный файл с условным оператором

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" 

ответ

2

анзибль будет обрабатывать group_vars для вас. Для любых хостов в группе web, вары на group_vars/web (или group_vars/web.yml) будут автоматически включены. См. Splitting Out Host and Group Specific Data в документах Ansible.

Чтобы ответить на ваш вопрос об условной переменной, примеры, которые вы дали, являются правильным синтаксисом. Вот еще один пример, не используя group_vars:

- include_vars: vars/{{ ansible_distribution}}_packages.yml 
    when: install_extra_packages is defined and 
     install_extra_packages != '' 

Обратите внимание, что include_vars принимает выражения, так что вы можете использовать переменные, чтобы определить VARS файлы тянуть в динамически.

+0

Я запускаю это локально с незарегистрированным инвентарем, иначе я оставил бы его в Ansible для обработки. – luckytaxi

+1

Если вы не используете группы, не используйте 'group_vars /'. Поместите свои файлы vars в 'vars /' и вытащите их оттуда. Реальный ответ здесь заключается в том, чтобы использовать группы, иначе вы тратите время на повторное выполнение решения Ansible. – conorsch

Смежные вопросы