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

Настроить все хосты, а затем создать список конфигов для всех хостов?

Я развернул огромное количество хостов с помощью Ansible, и это действительно отлично работало. Каждый хост получил свои индивидуальные настройки и конфигурацию.

Теперь я хотел бы создать файл конфигурации для другой системы, использующей эти хосты. Для этого мне нужно для каждого хоста часть сгенерированной конфигурации (той, которая настраивает базу данных).

Вот пример ситуации, когда два хоста имеют разную конфигурацию, а другая система использует часть конфигурации, сгенерированной Ansible:

host1

доступный настроенный dbA

host2

доступный настроенный dbQ

Другая система:

host1 = dbA

host2 = dbQ

Значения вычисляются по-разному (dbQ вместо того dbB для host2 например), если он принадлежит к другому кластеру и т. д., что делает непрактичным просто считывание конфигурации хоста из host_vars. Я считаю, что мне нужно было бы перебрать хосты и позволить Ansible вычислить вычисленные значения для переменных, как при развертывании, но я не знаю, как поместить этот результат в один шаблон.

Пожалуйста, порекомендуйте :)

Если я правильно понимаю вашу ситуацию, вы можете сделать это, используя комбинацию set_fact и / или шаблона, который затем проходит через все хосты. Например, предположим, что у вас есть задача, определенная примерно так:

- name : Configure database
  command: /path/to/some/script {{ inventory_hostname }} {{ some_var }} {{ some_other_var }}

Вы можете использовать set_fact, чтобы связать эти значения с рассматриваемым хостом:

- name: Stash the variables for later use
  set_fact:
    var_1 : {{ some_var }}
    var_2 : {{ some_other_var }}
    host_and_var : "{{ inventory_hostname }}-{{ some_var}}"
    etc.

Затем, когда придет время создать файл конфигурации, у вас будет действие шаблона или local_action, которое генерирует файл конфигурации. Шаблон будет содержать что-то вроде этих строк:

{% for host in groups['some_host_group']|sort %}
{% if hostvars[host]["var_1"] is defined %}
{{ host }} = {{ hostvars[host]["var_1"] }}
{% endif %}
{% endfor %}