如何将字符串附加到列表中的每个项以在模板中显示它



我正在尝试设置一个模板,该模板将引入一个逗号分隔的主机列表,并为每个主机添加一个端口。

列表,一个可以回答的事实:{{ nodes }})看起来像这样:

node1,node2,node3,...,nodeX

我希望最终的模板文件看起来像这样:

node1:1234
node2:1234
node3:1234
...
nodeX:1234

我的精灵模板目前看起来像:

"{{ nodes.split(',') | to_nice_json | indent(8) }}"

这让我着迷:

node1,
node2,
node3,
...,
nodeX

但是,如何将端口附加到每个节点?

我试过的各种组合

  • {{ nodes.split(',') | join(':1234) | to_nice_json | indent(8) }}
    
  • {{ nodes.split(',') | + (':1234) | to_nice_json | indent(8) }}
    
  • {% for n in {{ nodes.split(,) }} | zip(':1234') %}
    {{ n[0]n[1] }}
    {% endfor %}
    
  • etc

您需要使用product,以便为拆分的nodes列表中的每个元素重复端口
然后,在map中加入具有join的列表列表
最后,将所有内容连接在一起,并缩进。

这将是您的模板表达式:

{{ nodes.split(',')
| product([':1234'])
| map('join')
| join('n')
| indent(8, True)
}}

PS:indent过滤器的第二个参数指示它也缩进第一行

first–不要跳过缩进第一行

来源:https://jinja.palletsprojects.com/en/3.1.x/templates/#jinja-过滤器.缩进

Q:"设置一个模板,该模板拉入以逗号分隔的主机列表,并为每个主机附加一个端口">

最终的模板文件应该如下所示:

node1:1234
node2:1234
node3:1234
...
nodeX:1234

A: 模板是非常简单的

shell> cat nodes.txt.j2
{% for n in nodes.split(',') %}
{{ n }}:1234
{% endfor %}

例如,播放

- hosts: localhost
vars:
nodes: "node1,node2,node3,nodeX"
tasks:
- template:
src: nodes.txt.j2
dest: /tmp/nodes.txt

将创建文件

shell> cat /tmp/nodes.txt 
node1:1234
node2:1234
node3:1234
nodeX:1234

相关内容

  • 没有找到相关文章

最新更新