使用win_disk_facts遍历磁盘时结果首现空字典的问题排查
问题解决:Ansible循环生成磁盘详情时去除开头空字典
原代码问题分析
你的代码存在两个核心问题:
- 错误地用字符串拼接方式构造
mdisk变量,而非使用Ansible原生的列表/字典操作,导致数据结构混乱 - 初始值
mdisk|d({})设为空字典,第一次循环时会将空字典与新生成的磁盘字典拼接成嵌套列表,直接导致开头出现空字典
修正后的代码
- name: 获取磁盘信息 win_disk_facts: - name: 构造磁盘详情列表 set_fact: mdisk: "{{ mdisk | d([]) + [ { 'name': item.friendly_name, 'Firmware_version': item.firmware_version } ] }}" loop: "{{ ansible_disks }}"
代码说明
- 初始值设置:用
mdisk | d([])将mdisk初始化为空列表(而非空字典),确保第一次循环从空列表开始追加元素 - 列表追加操作:用
+操作符将每次循环生成的单个磁盘字典(包裹在[]中作为列表元素)追加到mdisk列表 - 简化取值:直接用
item.friendly_name替代json_query,语法更简洁高效
修正后的输出示例
"ansible_facts": { "mdisk": [ { "name": "abcde", "Firmware_version": "x1y2z3" }, { "name": "xyze", "Firmware_version": "2341" } ] }
内容的提问来源于stack exchange,提问作者User050488
相关产品推荐
相关产品推荐

