Можно ли определить переменные хоста для всех хостов с помощью динамической инвентаризации?
В настоящее время я могу произвести инвентаризацию, которая позволяет мне назначать переменные конкретным хостам, но я хочу добиться чего-то вроде этого:
{
"_meta": {
"hostvars": {
"all": {
"my_global_random_variable": "global_random_value"
}
}
},
"web_servers": {
"children": [],
"hosts": [
"web_server1",
"web_server2"
],
"vars": {}
},
"database_servers": {
"children": [],
"hosts": [
"database_server1"
],
"vars": {}
}
}
Это должно позволить мне получить доступ к «my_global_random_variable» из любого контекста, как если бы я определил эту переменную в файле vars.
Переменные устанавливаются dynamic inventory
являются inventory variables
. Когда переменная установлена в нескольких местах, Ansible устанавливает значение после переменный приоритет:
role defaults [1] inventory vars [2] inventory group_vars inventory host_vars playbook group_vars playbook host_vars host facts play vars play vars_prompt play vars_files registered vars set_facts role and include vars block vars (only for tasks in block) task vars (only for the task) extra vars (always win precedence)
Переменные, установленные в инвентаре, имеют относительно низкий приоритет. Так что нет необходимости использовать dynamic inventory
чтобы добиться этого. Просто установите переменную, например, на уровне роли.
В итоге я использовал плагин поиска вместо инвентаря для получения моих переменных.
Дополнительная информация о поисках: https://docs.ansible.com/ansible/playbooks_lookups.html
Я хотел это сделать и, похоже, работает со следующим (адаптированным для вашего примера):
{
"all": {
"vars": {
"my_global_random_variable": "global_random_value"
}
},
"web_servers": {
"children": [],
"hosts": [
"web_server1",
"web_server2"
],
"vars": {}
},
"database_servers": {
"children": [],
"hosts": [
"database_server1"
],
"vars": {}
}
}
Возможно, это не лучшая практика, но все упрощает.