elasticsearch - Elasticsearch Beats的Jinja模板

标签 elasticsearch ansible jinja2

我正在创建一个Ansible角色来部署Elastic Stack和各种Beats。我已经启动并运行了所有ES服务器,现在正在部署所需的各种Beats。

我正在为beats config yaml文件创建Jinja模板。我需要确定我的摄取节点和端口。我从Foreman部署了所有内容,因此我在其中使用参数来覆盖在角色中设置的默认值。

我有一个这样的数组变量设置:ingest_nodes: ["node1", "node2", "node3"]我为master_nodes设置了相同的东西。为了在用于elasticsearch.yml文件模板的模板中获取该数组,我使用{{ master_nodes|to_yaml }},这会产生我在该文件中所需的结果。

但是对于beats配置文件,看起来我需要将端口(我也将其定义为变量)附加到每个节点。

我正在寻找一种在模板中执行此操作的方法。我这样做是为了使集群可伸缩。如果我需要更多的摄取节点或任何种类的节点,只需将主机名添加到适当的数组变量,构建新的VM,然后在所有节点上重新运行ansible以获取更新的配置。

从以下变量中:

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

我需要能够有这样的模板输出:
host: [node1:9200, node2:9200, node3:9200]

最佳答案

下面的任务

    - 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]

关于elasticsearch - Elasticsearch Beats的Jinja模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60788589/

相关文章:

javascript - 使用 jinja2 兼容模式预编译 Nunjucks 模板

elasticsearch - 使用Grafana监控ElasticSearch

java - Elasticsearch 无法启动 - 权限问题

windows - Elasticsearch - 在 Windows 中使用 Sense Web 插件批量插入

variables - 通过 Ansible "terraform"模块执行 Terraform。需要一组字符串

windows - Ansible Windows 客户端或带有 Ansible Linux 服务器的主机?可能的?

python - Jinja2 自定义函数给出位置参数错误

elasticsearch - 如何在 ElasticSearch 中查找所有重复的文档

ansible if else 构造

python - 在 GAE 上运行时外部 CSS 样式表不起作用