ИМХО, с Jinja2 невозможно включить условные переменные роли по умолчанию, кроме строк.
pkg: |
{% if inventory_hostname in groups['web'] %}
inventory_hostname IS member of the group 'web'
{% else %}
inventory_hostname IS NOT member of the group 'web'
{% endif %}
Существует возможность условно include_vars .Возможно, вы захотите просмотреть Приоритет переменной: куда я должен поместить переменную? и решить, соответствует ли это потенциальным другим условиям проекта.
Для продолжения include_vars поместите переменные в файлы
$ cat vars/all.yml
pkg:
- { name: 'pkg-libs' }
- { name: 'pkg-core' }
$ cat vars/web.yml
pkg:
- { name: 'pkg-php' }
- { name: 'pkg-web' }
Если инвентарь_hostname (хост, к которому применяется воспроизведение)член группы web , переменные из файла vars / web.yml включены.Игра ниже
- hosts: srv-web-01
vars:
web:
pkg: []
tasks:
- include_vars:
file: vars/all.yml
name: common
- include_vars:
file: vars/web.yml
name: web
when: inventory_hostname in groups['web']
- set_fact:
pkg: "{{ pkg|default([]) + web.pkg + common.pkg }}"
- debug:
var: pkg
дает
"pkg": [
{
"name": "pkg-php"
},
{
"name": "pkg-web"
},
{
"name": "pkg-libs"
},
{
"name": "pkg-core"
}
]
Стандартное решение
Возможное стандартное решение для включения переменных для группы хостов: group_vars , которые имеют приоритет Variable прямо над роль по умолчанию .Ожидаемый результат может быть просто достигнут с помощью следующих group_vars
$ cat group_vars/all.yml
pkg:
- { name: 'pkg-libs' }
- { name: 'pkg-core' }
$ cat group_vars/web.yml
pkg:
- { name: 'pkg-libs' }
- { name: 'pkg-core' }
- { name: 'pkg-php' }
- { name: 'pkg-web' }
Расширенное решение
Неэффективно обновлять многие group_vars файлов, если общий элемент изменяется.Можно объявить переменные, специфичные для модульной группы
$ cat group_vars/all.yml
pkg_all:
- { name: 'pkg-libs' }
- { name: 'pkg-core' }
$ cat group_vars/web.yml
pkg_web:
- { name: 'pkg-php' }
- { name: 'pkg-web' }
, и объединить все pkg_ * в пространстве переменных хоста, то есть переменные pkg_ *, объявленные в group_vars , членом которого является хост
- set_fact:
pkg: "{{ pkg|default([]) + lookup('vars', item) }}"
loop: "{{ hostvars[inventory_hostname].keys()|
select('match', '^pkg_(.*)$')|
list }}"
- set_fact:
pkg: "{{ pkg|unique }}"
- debug:
var: pkg