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

Ansible如何以流式映射YAML输出字典列表?求非Jinja模板方案

在Ansible中实现字典列表的流式映射YAML输出

除了自定义Jinja模板,还有两种可行方法可以实现需求:

方法一:利用内置yaml过滤器结合循环

Ansible的yaml过滤器基于PyYAML实现,通过给单个字典设置default_flow_style=True参数,可将其转换为流式映射格式,再通过循环拼接成列表结构。

示例Playbook:

- name: 生成流式映射格式YAML
  hosts: localhost
  vars:
    my_servers:
      - hostname: myhostname1
        id: 101
        reverse: 'true'
        type: red
      - hostname: myhostname2
        id: 102
        reverse: 'false'
        type: white
      - hostname: myhostname3
        id: 103
        reverse: 'true'
        type: blue
      - hostname: myhostname4
        id: 104
        reverse: 'false'
        type: green
  tasks:
    # 输出到控制台
    - name: 打印流式YAML
      debug:
        msg: |
          my_servers:
          {% for server in my_servers %}
            - {{ server | yaml(default_flow_style=True) | trim }}
          {% endfor %}

    # 写入到文件
    - name: 写入流式YAML到文件
      copy:
        content: |
          my_servers:
          {% for server in my_servers %}
            - {{ server | yaml(default_flow_style=True) | trim }}
          {% endfor %}
        dest: ./servers_output.yaml

方法二:使用ansible.utils.to_yaml过滤器(需额外安装集合)

ansible.utils集合提供的to_yaml过滤器支持更细粒度的格式控制,可通过flow_style参数指定列表用块式、列表内的字典用流式。

步骤1:安装集合

ansible-galaxy collection install ansible.utils

步骤2:Playbook示例

- name: 用ansible.utils生成目标格式YAML
  hosts: localhost
  collections:
    - ansible.utils
  vars:
    my_servers:
      - hostname: myhostname1
        id: 101
        reverse: 'true'
        type: red
      - hostname: myhostname2
        id: 102
        reverse: 'false'
        type: white
      - hostname: myhostname3
        id: 103
        reverse: 'true'
        type: blue
      - hostname: myhostname4
        id: 104
        reverse: 'false'
        type: green
  tasks:
    - name: 生成并输出流式YAML
      debug:
        msg: "{{ {'my_servers': my_servers} | to_yaml(flow_style={'my_servers': False, 'my_servers.*': True}) }}"

    - name: 写入到文件
      copy:
        content: "{{ {'my_servers': my_servers} | to_yaml(flow_style={'my_servers': False, 'my_servers.*': True}) }}"
        dest: ./servers_output.yaml

说明

flow_style参数的字典配置中:

  • 'my_servers': False 指定顶层列表采用块式格式(每个元素单独一行)
  • 'my_servers.*': True 指定列表内的所有字典元素采用流式映射格式

内容的提问来源于stack exchange,提问作者honeybeeham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:01:00