Запустите импортированную книгу воспроизведения Ansible для каждого уникального значения в наборе переменных хоста. - PullRequest
0 голосов
/ 01 января 2019

У меня есть книга игр, которая должна работать со всем моим инвентарем, со списком имен хостов в качестве дополнительной переменной (target_hosts).

Все хосты в target_hosts имеют group_id hostvar, определенный на них.Я использую весь инвентарь, потому что некоторые вспомогательные хосты, которые соответствуют group_id var, нуждаются в конфигурации для каждой группы, чтобы соответствовать в одном разделе.

В * часто будет несколько значений group_id, связанных с хостами в target_hosts список.Мне нужно выбрать правильную группу инвентаря вспомогательных хостов и импортировать / запустить playbook, чтобы настроить оба набора серверов на полпути через основной playbook.

Это то, что я сейчас делаю:

include_playbook: group-configure.yaml
vars:
  src_hosts: "group-{{ group_id }}-ancillary-1"
  dest_hosts: "{{ target_hosts }}"

В настоящее время я должен вручную разделить target_hosts на group_id вручную, а затем запустить основную книгу воспроизведения один раз для каждого.Это имеет массу ненужных накладных расходов.

Что я действительно хочу выполнить, это:

for each group of hosts from `target_hosts` with the same `group_id` hostvar:
  import and run group-configure.yaml with:
    src_hosts: "ancillary-{{ group_id }}"
    target_hosts: restricted to those with that value of `group_id`'

Как я могу это сделать?Если нынешний способ структурирования не сработает, каков наилучший альтернативный подход?

1 Ответ

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

Я почти уверен, что add_host: в сочетании с groupby - это то, что вы ищете, что позволит вам свернуть эти хосты по их атрибуту, а затемЗапустите Playbook против них, как если бы эта группа уже была определена:

- hosts: localhost
  connection: local
  gather_facts: no
  become: no
  vars:
    list_of_name_groups: >-
        {%- set results = [] -%}
        {%- for g_id, items in (dict(hostvars) | dict2items | groupby("value.group_id")) -%}
        {%- for hostname in (items | map(attribute="key") | list) -%}
        {%- set _ = results.append({"group_id": g_id, "hostname": hostname}) -%}
        {%- endfor -%}
        {%- endfor -%}
        {{ results }}
  tasks:
  - add_host:
      name: '{{ item.hostname }}'
      groups: ancillary-{{ item.group_id }}
    with_items: '{{ list_of_name_groups }}'

- hosts: ancillary-my-awesome-groupid
  # etc etc
...