在 Ansible 模板中加入键值对列表
Join a list of key-value pairs in Ansible template
我需要将以下 yaml 字典转换为以逗号分隔的键=值对列表
nodes:
node1: 192.168.56.11
node2: 192.168.56.12
所以变成了
node1=192.168.56.11,node2=192.168.56.12
在 Python 中,我会通过简单的列表理解来完成,然后加入列表:
','.join([ k+'='+v for k,v in nodes.items()])
不过,我不知道如何在 Ansible 模板中优雅地做到这一点。当然,我可以用 for
循环来完成,但它会留下尾随的逗号。迄今为止我的最佳成绩:
{% for k,v in nodes.items() %}{{k}}={{v}}{% if not loop.last %},{% endif %}{% endfor %}
我是不是忽略了什么?
Ansible 等效项是以下 items()
和连接的链接。如果您希望它们按键排序,我添加了第二种方法:
---
- hosts: localhost
gather_facts: false
vars:
nodes:
node3: 192.168.56.13
node1: 192.168.56.11
node4: 192.168.56.14
node2: 192.168.56.12
tasks:
- name: print var
debug:
var: nodes.items()|map('join', '=')|join(',')
- name: print var (items sorted)
debug:
var: nodes|dictsort|map('join', '=')|join(',')
或者,在模板中:
{{nodes.items()|map("join", "=")|join(",")}}
我需要将以下 yaml 字典转换为以逗号分隔的键=值对列表
nodes:
node1: 192.168.56.11
node2: 192.168.56.12
所以变成了
node1=192.168.56.11,node2=192.168.56.12
在 Python 中,我会通过简单的列表理解来完成,然后加入列表:
','.join([ k+'='+v for k,v in nodes.items()])
不过,我不知道如何在 Ansible 模板中优雅地做到这一点。当然,我可以用 for
循环来完成,但它会留下尾随的逗号。迄今为止我的最佳成绩:
{% for k,v in nodes.items() %}{{k}}={{v}}{% if not loop.last %},{% endif %}{% endfor %}
我是不是忽略了什么?
Ansible 等效项是以下 items()
和连接的链接。如果您希望它们按键排序,我添加了第二种方法:
---
- hosts: localhost
gather_facts: false
vars:
nodes:
node3: 192.168.56.13
node1: 192.168.56.11
node4: 192.168.56.14
node2: 192.168.56.12
tasks:
- name: print var
debug:
var: nodes.items()|map('join', '=')|join(',')
- name: print var (items sorted)
debug:
var: nodes|dictsort|map('join', '=')|join(',')
或者,在模板中:
{{nodes.items()|map("join", "=")|join(",")}}