Ansible:如何从字典中移除指定前缀的键值对?
你遇到的问题根源在于:直接对字典使用reject过滤器时,Ansible默认会迭代字典的键而非完整的键值对,所以最终只返回了符合条件的键名列表。要保留键值对并得到目标字典,需要借助格式转换类过滤器来实现:
正确的过滤器写法
"{{ get_ec2_id.instances[0].tags | dict2items | rejectattr('key', 'search', '^aws:cloudformation') | items2dict }}"
分步拆解逻辑
dict2items:把原始的tags字典转换成包含key和value字段的列表结构,比如:[ {"key": "Name", "value": "test-db-system-2"}, {"key": "aws:cloudformation:logical-id", "value": "DBInstance"}, ... ]rejectattr('key', 'search', '^aws:cloudformation'):过滤掉所有key以aws:cloudformation开头的项(^正则锚定符确保只匹配开头,避免误过滤其他带aws:前缀的非目标键)items2dict:把过滤后的键值对列表重新转换回字典格式,这就是你想要的最终结果
预期输出验证
使用这个过滤器后,你会得到完全符合需求的字典:
"instances_tags": { "dbsystem:stack": "test-db-system-2", "dbsystem:type": "db", "Name" : "test-db-system-2" }
如果你的需求是过滤所有以aws:开头的键,只需要把正则表达式改成^aws:即可。
内容的提问来源于stack exchange,提问作者Ankur Gupta
相关产品推荐
相关产品推荐

