问题描述
这是盐config.sls
{% set testval = ["172.16.49.169:5044","172.16.51.156:5044"] %}
filebeat_config:
file.managed:
- name: /etc/filebeat/filebeat.yml
- source: salt://filebeat/files/filebeat.yml.tmpl
- template: jinja
- user: root
- mode: 600
- context:
logstash_hosts: {{ testval }}
渲染时,主机条目如下所示:
hosts: [u'172.16.49.169:5044',u'172.16.51.156:5044']
如何删除每个字符串前的 u'?
我尝试过 {{ testval|tojson }}
、{{ testval|json }}
和 - encoding: ascii/utf-8
解决方法
这个问题似乎与编码有关,因为我正在使用下面的示例按预期呈现配置。
我的 config.sls
状态文件:
{% set testval = ["192.168.1.11:5044","192.168.1.12:5044"] %}
filebeat_config:
file.managed:
- name: /tmp/filebeat.yml
- source: salt://files/filebeat.yml.j2
- template: jinja
- context:
logstash_hosts: {{ testval }}
filebeat.yml.j2
模板:
hosts: {{ logstash_hosts }}
渲染:
hosts: ['192.168.1.11:5044','192.168.1.12:5044']
不过
由于 Filebeat 配置遵循 YAML 语法,我们可以使用 YAML list -
语法。我们可以有一个 filebeat.yml.j2
模板文件,例如:
output.logstash:
hosts:
{%- for host in logstash_hosts %}
- "{{ host }}"
{%- endfor %}
使用相同的 config.sls
状态,配置呈现为:
output.logstash:
hosts:
- "192.168.1.11:5044"
- "192.168.1.12:5044"
,
tojson
选项需要在 tmpl 文件中,而不是 config.sls
filebeat.yml.tmpl
output.logstash:
hosts: {{ testval|tojson }}
loadbalance: True
index: filebeat