Q: "Как мне получить все переменные в моей книге игр?"
A: Цитирование из Ansible настроек конфигурации DEFAULT_HASH_BEHAVIOUR :
По умолчанию Ansible переопределяет переменные в определенных c порядках приоритета, как описано в Приоритет переменной: куда следует поместить переменную? ... Некоторые пользователи предпочитают, чтобы переменные, являющиеся хешами (иначе говоря, «словари» в терминах Python), объединялись. Этот параметр называется «слияние». Это не поведение по умолчанию, и оно не влияет на переменные, значения которых являются скалярами (целыми числами, строками) или массивами. Обычно мы рекомендуем не использовать этот параметр ...
Переменные в вопросе не являются словарями и не могут быть объединены.
Вместо этого давайте создадим словари, которые могут использоваться для монтировать файловые системы. Например
shell> cat group_vars/devgroup.yml
mounts:
a:
dev: sda1
mnt: /a
b:
dev: sda2
mnt: /b
shell> cat host_vars/server001.yml
mounts:
d:
dev: sda3
mnt: /d
e:
dev: sda4
mnt: /e
shell> cat host_vars/server002.yml
mounts:
s:
dev: sda5
mnt: /s
t:
dev: sda6
mnt: /t
Playbook
shell> cat pb.yml
- hosts: devgroup
tasks:
- debug:
var: mounts
по умолчанию переопределяет group_vars на host_vars и дает
shell> ansible-playbook pb.yml
[...]
ok: [server001] => {
"mounts": {
"d": {
"dev": "sda3",
"mnt": "/d"
},
"e": {
"dev": "sda4",
"mnt": "/e"
}
}
}
ok: [server002] => {
"mounts": {
"s": {
"dev": "sda5",
"mnt": "/s"
},
"t": {
"dev": "sda6",
"mnt": "/t"
}
}
}
Но с ANSIBLE_HASH_BEHAVIOUR=merge
та же книга воспроизведения дает объединенные словари
shell> export ANSIBLE_HASH_BEHAVIOUR=merge
shell> ansible-playbook pb.yml
[...]
ok: [server001] => {
"mounts": {
"a": {
"dev": "sda1",
"mnt": "/a"
},
"b": {
"dev": "sda2",
"mnt": "/b"
},
"d": {
"dev": "sda3",
"mnt": "/d"
},
"e": {
"dev": "sda4",
"mnt": "/e"
}
}
}
ok: [server002] => {
"mounts": {
"a": {
"dev": "sda1",
"mnt": "/a"
},
"b": {
"dev": "sda2",
"mnt": "/b"
},
"s": {
"dev": "sda5",
"mnt": "/s"
},
"t": {
"dev": "sda6",
"mnt": "/t"
}
}
}