Ansible中如何将字典列表的value字段从逗号分隔字符串转为IP列表
Ansible 字典列表字段格式转换解决方案
核心实现逻辑
仅需对list_report列表中的每一个字典元素做如下处理:
- 保留原有
objectid字段的取值不变 - 对
value字段调用字符串split(',')方法,按逗号拆分生成IP列表
实现方案1:显式循环构建新列表
直接通过loop遍历原有列表,逐元素重构后存入新变量,逻辑直观易调试:
# 先将原始list_report暂存到临时变量,避免循环过程中覆盖原始值导致异常 - name: 暂存原始list_report数据 set_fact: original_list_report: "{{ list_report }}" - name: 重构list_report数据结构 set_fact: list_report: "{{ list_report | default([]) + [{'objectid': item.objectid, 'value': item.value.split(',')}] }}" loop: "{{ original_list_report }}"
实现方案2:Jinja2表达式单行转换(更简洁)
通过Jinja2模板语法批量处理列表元素,无需显式写循环,代码更精简:
- name: 重构list_report数据结构 set_fact: list_report: >- {% set res = [] %} {% for item in list_report %} {{ res.append({'objectid': item.objectid, 'value': item.value.split(',')}) }} {% endfor %} {{ res }}
异常兼容处理
注意:如果存在
value字段为空的场景,可以在拆分时添加默认值兜底,避免空值调用split方法报错:# 拆分逻辑替换为如下写法 'value': item.value | default('').split(',')
结果验证
执行如下任务即可验证输出结构是否符合预期:
- name: 打印转换后的list_report debug: var: list_report
内容的提问来源于stack exchange,提问作者Mohamed Bouraoui
相关产品推荐
相关产品推荐

