【问题标题】:Jinja Template for Elasticsearch BeatsElasticsearch Beats 的 Jinja 模板
【发布时间】:2020-03-21 13:48:54
【问题描述】:

我正在创建一个 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]

【问题讨论】:

    标签: elasticsearch ansible jinja2


    【解决方案1】:

    下面的任务

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

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      相关资源
      最近更新 更多