ANSIBLE: Как добавить переменную из групп инвентаря - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть ansible инвентарь с группами следующим образом:

  +hosts/
  +all/
  +group_vars/
    - linux.yml
    - webserver.yml
    - dbserver.yml
...

И у меня есть книга игр, которая устанавливает мониторинг для хостов; и вид мониторинга осуществляется с помощью плагинов. Таким образом, в каждой группе y установлен список monitoring_plugins, который содержит плагин, чтобы иметь возможность отслеживать каждый сервис. Внутри каждой группы yml я пытаюсь «добавить» в список:

monitoring_plugins: {{ monitoring_plugins|default([]) + [ 'whatever_plugin_correspond_to_group' ] }}

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

Есть ли способ acommpli sh this?

Заранее спасибо.

1 Ответ

2 голосов
/ 20 апреля 2020

То, что вы описываете, должно работать должным образом в рамках задачи , но вы не можете иметь исполняемый код в vars или group_vars yaml или json файле - это stati c

Так что вам нужно будет задать отдельное имя на низком уровне, а затем свернуть их на верхнем уровне:

group_vars/
  dbserver.yml  # sets monitoring_plugins_dbserver: ["a", "b"]
  linux.yml     # sets monitoring_plugins_linux: ["c", "d"]

, а затем в ваших задачах, что-то вроде этого ( но будьте предупреждены, я не проверял этот спецификатор c пример ):

- set_fact:
    monitoring_plugins: >-
      {% set results = [] %}
      {% for g in groups.keys() %}
      {% set _ = results.extend(vars['monitoring_plugins_'+g]|d([])) %}
      {% endif %}
      {{ results }}
...