Джинджа шаблон для Elasticsearch Beats - PullRequest
1 голос
/ 21 марта 2020

Я создаю Ansible роль для развертывания Elasti c Stack и различных битов. У меня все ES-серверы запущены и работают, и сейчас я работаю над развертыванием различных необходимых мне битов.

Я создаю шаблон Jinja для файлов yaml конфигурации битов. Мне нужно идентифицировать мои узлы приема и порт. Я развертываю все из Foreman, поэтому я использую параметры там, чтобы переопределить значения по умолчанию, установленные в моих ролях.

У меня есть переменная массива, настроенная так: ingest_nodes: ["node1", "node2", "node3"] У меня тоже самое, что и для master_nodes , Чтобы получить этот массив в шаблоне для шаблона файлаasticsearch.yml, я использую {{ master_nodes|to_yaml }}, и это приводит к результатам, которые мне нужны в этом файле.

Но для файла конфигурации beats, похоже, мне нужно добавить порт (который я также определил как переменную) для каждого узла.

Я ищу способ сделать это в шаблоне. Я сделал это таким образом, чтобы сделать кластер масштабируемым. Если мне нужно больше узлов загрузки или каких-либо других узлов, я просто добавляю имя хоста в соответствующую переменную массива, собираю новую ВМ и повторно запускаю ansible на всех узлах, чтобы получить обновленные конфигурации.

Из приведенных ниже переменных:

ingest_nodes: ["node1", "node2", "node3"]
elastic_port: 9200

Мне нужно, чтобы вывод шаблона был таким:

host: [node1:9200, node2:9200, node3:9200]

1 Ответ

0 голосов
/ 21 марта 2020

Задание ниже

    - template:
        src: beats.conf.j2
        dest: beats.conf

с шаблоном

shell> cat beats.conf.j2
host: [{% for item in ingest_nodes-%}
{{ item }}:{{ elastic_port }}{{ ", " if not loop.last else "" }}
{%- endfor %}]

дает

shell> cat beats.conf
host: [node1:9200, node2:9200, node3:9200]
...