如何在Ansible中将字典转换为key=value空格分隔的字符串
实现方法
你可以直接通过Ansible内置的Jinja2过滤器组合实现,不需要额外写循环逻辑,代码简洁且易维护。
核心转换逻辑
假设你的字典存放在变量command_dict中,转换表达式如下:
{{ command_dict | dict2items | map('join', '=') | join(' ') }}
完整Playbook示例
--- - name: 字典转key=value空格分隔字符串 hosts: localhost gather_facts: false vars: # 待处理的YAML结构 config: command: chain: dstnat action: dst-nat to-addresses: blaah tasks: - name: 生成目标格式字符串 ansible.builtin.set_fact: command_str: "{{ config.command | dict2items | map('join', '=') | join(' ') }}" - name: 输出转换结果 ansible.builtin.debug: var: command_str
运行输出
执行后得到的command_str值为:
chain=dstnat action=dst-nat to-addresses=blaah
和你给出的Python代码执行效果完全一致。
过滤器逻辑说明
dict2items:将字典转换为键值对对象列表,格式为[{"key": "chain", "value": "dstnat"}, ...]map('join', '='):遍历每个键值对对象,将key和value用=拼接为单个字符串join(' '):将所有拼接好的单条字符串用空格连接,得到最终结果
可选优化(值含特殊字符场景)
如果你的value中包含空格、引号等特殊字符,需要给值加双引号包裹,可以调整转换逻辑为:
{{ config.command | dict2items | map('format', '%s="%s"') | join(' ') }}
生成的结果为:
chain="dstnat" action="dst-nat" to-addresses="blaah"
内容的提问来源于stack exchange,提问作者Taavi Ansper
相关产品推荐
相关产品推荐

