You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:36:03