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

如何解决Ansible自定义Python过滤器追加参数被覆盖及重复键更新问题

问题根源
  1. 原有代码缩进错误,且parameters判断逻辑完全错误:你尝试捕获的是全局作用域的parameters变量,而非当前遍历条目下的parameters属性,导致每次命中目标order_number时都会触发NameError,强制新建空的parameters列表,原有参数自然被覆盖。
  2. 原有代码只将命中order_number的条目加入返回结果,其余未命中的条目会被丢弃,存在数据丢失风险。
  3. 没有重复键检测逻辑,即使参数键已存在也会直接追加新字典,导致同键重复。
修正后的Python过滤器代码
#!/usr/bin/python
class FilterModule(object):
    def filters(self):
        return {
            'add_item': self.add_item
        }

    def add_item(self, obj, order_number, parameter_key, parameter_value):
        result = []
        for r in obj:
            # 不匹配目标序号的条目直接保留
            if r['order_number'] != order_number:
                result.append(r)
                continue
            # 匹配到目标条目,处理参数
            # 先获取已有的parameters列表,没有则初始化
            if 'parameters' not in r:
                parameters = []
            else:
                parameters = r['parameters']
            # 检查是否已存在对应键,存在则更新
            key_existed = False
            for param in parameters:
                if parameter_key in param:
                    param[parameter_key] = parameter_value
                    key_existed = True
                    break
            # 键不存在则追加新条目
            if not key_existed:
                parameters.append({parameter_key: parameter_value})
            # 更新条目的parameters属性
            r['parameters'] = parameters
            result.append(r)
        return result
逻辑说明
  • 所有未命中目标order_number的条目直接原样保留,避免原有数据丢失
  • 优先读取目标条目已有的parameters列表,不存在才初始化空列表,不会覆盖原有参数
  • 追加新参数前先遍历现有参数列表,检测到相同键直接更新值,不会生成重复键条目
  • 多次调用过滤器时会在原有参数基础上追加,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:36:02