Saltstack/Jinja:如何从字符串列表中删除 u' 前缀

问题描述

这是盐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