Доступ к значениям по умолчанию по умолчанию - PullRequest
1 голос
/ 01 ноября 2019

Мне нужно получить доступ к значениям по умолчанию для ролей в контексте других хостов в инвентаре. Несмотря на то, что значения, определенные в инвентаризации, доступны, по умолчанию роль отсутствует.

Моя проблема демонстрируется в следующем примере:

#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"
    ]
}

Невозможно определить все значения в инвентаре. Эта проблема делает ролевые настройки по умолчанию непригодными для меня.

Любая помощь или предложение приветствуются.

1 Ответ

0 голосов
/ 02 ноября 2019

Вы можете определить user_email_address как

user_email_address: "{{ hostvars[item]['user_name'] }}@{{ hostvars[item]['domain'] }}"

, чтобы воспользоваться преимуществами отложенной загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...