我正在尝试设置一个模板,该模板将引入一个逗号分隔的主机列表,并为每个主机添加一个端口。
列表,一个可以回答的事实:{{ 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