Приоритет не настраивается в Ansible, вы не можете дать конфигурации в group_vars
более высокий приоритет, чем конфигурация в каталоге vars
в роли.
Что вы хотите: условные переменные по умолчанию , которые Ansible не поддерживает.Например, здесь условно задает роль Ansible по умолчанию , а здесь использует условные выражения в vars ansible .
Это область, в которой Ansible определенно отсутствует как инструмент IaC.Это, например, очень часто используемая функция с Chef.Фрагмент из attribute / default.rb из поваренной книги Chef Apache демонстрирует этот общий шаблон
....
case node['platform_family']
when 'rhel', 'fedora', 'amazon'
if node['platform'] == 'amazon'
default['apache']['package'] = 'httpd24'
default['apache']['devel_package'] = 'httpd24-devel'
else
default['apache']['package'] = 'httpd'
default['apache']['devel_package'] = 'httpd-devel'
end
default['apache']['service_name'] = 'httpd'
default['apache']['perl_pkg'] = 'perl'
default['apache']['apachectl'] = '/usr/sbin/apachectl'
default['apache']['dir'] = '/etc/httpd'
default['apache']['log_dir'] = '/var/log/httpd'
Конфигурацию в каталоге vars
можно сравнить с атрибутами «override» в Chef.Конфигурация в поваренной книге шеф-повара имеет низкий приоритет, но вы можете использовать атрибуты «переопределить», чтобы дать очень высокий приоритет.Использование атрибутов «переопределить» в кулинарных книгах, однако, очень редко.Они имеют очень ограниченное практическое использование.Наоборот, каталог Ansible vars
для его предполагаемое использование для создания конфигурации с высоким приоритетом, которая переопределяет почти все другие конфигурации, имеет очень ограниченное практическое использование.
Если вы не согласны, приведите примеры ролей, в которых нам абсолютно необходима конфигурация с высоким приоритетом для роли.Например, вы можете поделиться ссылкой на роль Ansible, которая демонстрирует практическое использование.
Каталог ролей vars
полезен, но не по назначению.На практике каталог используется для хранения условной конфигурации .Тот факт, что конфигурация получает высокий приоритет, является большей проблемой, чем желаемый или намеченный результат.
Это демонстрирует роль geerlingguy.posttgresql .В этой роли geerlingguy использует «псевдопеременные», чтобы обойти тот факт, что Ansible не имеет условных значений по умолчанию.
Например, в vars / Debian-7.yml введена переменная __postgresql_data_dir
.Эта переменная имеет высокий приоритет.
__postgresql_data_dir: "/var/lib/postgresql/{{ __postgresql_version }}/main"
Он не имеет практического применения, кроме того, что его можно использовать для имитации условной переменной по умолчанию postgresql_data_dir
, как показано в tasks / variables.yml
- name: Define postgresql_data_dir.
set_fact:
postgresql_data_dir: "{{ __postgresql_data_dir }}"
when: postgresql_data_dir is not defined
Было бы целесообразно настроить правила приоритета, поскольку каталог vars
в роли Ansible обычно имеет ограниченное практическое использование из-за его высокого приоритета.Для практического использования хитрости каталога vars
требуется, как демонстрирует postgresql_data_dir
в роли geerlingguy.posttgresql , чтобы снизить приоритет конфигурации в этом каталоге.
Если вы не используетеВам не понравится этот обман, в качестве альтернативы можно использовать обходной путь set_fact
, как описано в Условно установить стандартные роли Ansible или нечестное встроенное кодирование, как описано в , использовать условные выражения в vars ansible .
Сообществу Ansible рекомендуется изменить предполагаемое использование каталога vars
с «переопределить» на «условную» конфигурацию.Предоставление высокого приоритета конфигурации в роли является очень редким требованием.Однако условная конфигурация очень и очень распространена.