В одной из пьес Ansible я включил файл переменных, который содержит одну такую переменную:
dictionaries:
- host1:
- key1:
- name: "Foo"
params:
- bar: "Baz"
- host2:
- key1:
- name: "Foo2"
params:
- bar: "Baz2"
- host3:
- key1:
- name: "Foo3"
params:
- bar: "Baz3"
Я хочу взять только элемент списка, имя ключа которого является Ansible {{inventory_hostname}} хоста, на котором Ansible выполняет playbook.
Так, например, если я выполню playbook на host2 Я хочу получить словарь:
- key1:
- name: "Foo2"
params:
- bar: "Baz2"
Я пытаюсь использовать плагин поиска, но не знаю, как мне его использовать в этой ситуации.
После моего комментария выше давайте попробуем ответить, я считаю, что это правильная структура данных. Вот как я бы это изменил:
dictionaries:
host1:
key1:
name: "Foo"
params:
bar: "Baz"
host2:
key1:
name: "Foo2"
params:
bar: "Baz2"
host3:
key1:
name: "Foo3"
params:
bar: "Baz3"
key2:
name: "toto"
params:
titi: "tata"
Теперь предположим, что вы хотите получить доступ к имени key2
для host3
, ваша строка шаблона jinja2 будет
"{{ dictionnaries.host3.key2.name }}"
Вы также можете использовать для этого скобки, т.е.
"{{ dictionnaries['host3']['key2']['name'] }}"
... или комбинация (все это эквивалентные, неполный список примеров)
"{{ dictionnaries['host3'].key2.name }}"
"{{ dictionnaries['host3']['key2'].name }}"
"{{ dictionnaries.host3.key2['name'] }}"
Вернемся к вашему вопросу: теперь вы хотите получить доступ к хеш-карте ключей для определенного хоста при запуске playbook. Я считаю само собой разумеющимся, что ключи в вашем dictionnaries
переменные названы в честь хоста в вашем инвентаре. Поэтому я использую inventory_hostname
магическая переменная который содержит это имя при работе на определенном хосте
---
- name: debug vars from my dict
hosts: whatever_group
vars:
dictionaries:
host1:
key1:
name: "Foo"
params:
bar: "Baz"
host2:
key1:
name: "Foo2"
params:
bar: "Baz2"
host3:
key1:
name: "Foo3"
params:
bar: "Baz3"
key2:
name: "toto"
params:
titi: "tata"
tasks:
- name: debug hashmap per host
debug:
msg: "{{ dictionaries[inventory_hostname] }}"
Все это, как говорится, является своего рода изобретением колеса, поскольку в ansible уже есть механизм объявления переменных для каждого хоста в вашем инвентаре. Вы можете объявить свои хэш-карты в host_vars/<hostname>.yml
файл для каждого из ваших хостов. Тогда все, что вам нужно сделать, это использовать эти переменные как есть.
Посмотри на доступная документация по инвентаризации и, более конкретно, глава о организация переменных хоста и группы