Назад | Перейти на главную страницу

Определите переменные для всех хостов в динамической инвентаризации Ansible

Можно ли определить переменные хоста для всех хостов с помощью динамической инвентаризации?

В настоящее время я могу произвести инвентаризацию, которая позволяет мне назначать переменные конкретным хостам, но я хочу добиться чего-то вроде этого:

{
    "_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": {}
    }
}

Возможно, это не лучшая практика, но все упрощает.