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

Saltstack/Jinja: How to remove the u' prefix from a list of strings

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