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

Ansible:如何将特定列表转换为字典列表以支持selectattr过滤

把Ansible中的INI风格列表转成字典列表

你的原始数据是msg里的一个列表,元素要么是[[machine]]标记,要么是带缩进的键值对行。要转成目标字典列表,可以分两步用Ansible过滤器处理:

第一步:拆分出每个machine的片段

先把列表合并成完整字符串,再按[[machine]]分割,同时过滤掉空片段:

- set_fact:
    machine_chunks: "{{ msg | join('\n') | split('[[machine]]') | reject('equalto', '') | list }}"

第二步:把每个片段转成字典

循环每个片段,处理每行的键值对,最终拼成字典列表:

- set_fact:
    machine_list: "{{ machine_list | default([]) + [
        item | split('\n')
             | reject('match', '^\\s*$')  # 过滤空行
             | map('trim')                # 去掉每行前后的缩进和空格
             | map('split', ' = ', 1)     # 按第一个" = "分割键与值
             | items2dict                 # 将键值对列表转为字典
    ] }}"
  loop: "{{ machine_chunks }}"

你之前尝试出问题的原因

你直接把stdout_lines转成字符串再分割,破坏了换行结构导致内容混乱;而且用逗号分割完全不符合原始数据的格式——原始数据是用=分隔键值的,不是逗号。按上面的步骤处理后,就能得到你需要的[{"name": "foo", "year": "bar"}, ...]结构,之后可以正常用selectattr()遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:24:26