Мне нужно получить доступ к значениям по умолчанию для ролей в контексте других хостов в инвентаре. Несмотря на то, что значения, определенные в инвентаризации, доступны, по умолчанию роль отсутствует.
Моя проблема демонстрируется в следующем примере:
#inventory.yml:
all:
hosts:
srv01:
ansible_connection: local
user_name: srv-1-user
domain: example.com
srv02:
ansible_connection: local
user_name: srv-2-user
domain: example.net
#role-a/defaults.yml
user_email_address: {{ user_name }}@{{ domain }}
#role-a/main.yml
- set_fact:
_values: "{{ _values | default([]) + [hostvars[item]['user_email_address'] | default(user_email_address)] }}"
with_inventory_hostnames:
- all
- name: output
debug: var=_values
#site.yml
#!/usr/bin/env ansible-playbook
- hosts: all
tasks:
- import_role:
name: role-a
tags: 'role-a'
#command:
ansible-playbook -i inventory.yml site.yml
Приведенный выше код генерирует (как и ожидалось) следующий вывод:
ok: [srv02] => {
"_values": [
"srv-2-user@example.net",
"srv-2-user@example.net"
]
}
ok: [srv01] => {
"_values": [
"srv-1-user@example.com",
"srv-1-user@example.com"
]
}
Мне нужен следующий вывод:
ok: [srv02] => {
"_values": [
"srv-1-user@example.net",
"srv-2-user@example.net"
]
}
ok: [srv01] => {
"_values": [
"srv-1-user@example.com",
"srv-2-user@example.com"
]
}
Невозможно определить все значения в инвентаре. Эта проблема делает ролевые настройки по умолчанию непригодными для меня.
Любая помощь или предложение приветствуются.